2013-02-21 30 views
8

Tôi đã tối ưu hóa thời gian phản hồi của trang trên Tomcat và trong hầu hết các trường hợp, tôi sẽ thấy thời gian phản hồi là 50ms nếu tôi làm mới nhiều lần, nhưng nếu trang không được nhấn trong một giây hoặc hai thời gian phản hồi nhảy trở lại lên đến 500ms.Độ trễ lẻ tẻ của Tomcat

Tôi đã thấy hành vi tương tự này, không phụ thuộc vào địa phương, không phải địa phương, APR, NIO, JIO, phản hồi tĩnh hoặc động (tức là phân phát tệp tĩnh hoặc giao trả lời tự động). Cho đến nay tôi vẫn chưa thấy hành vi này không phải xảy ra trên Tomcat (đó là nhất quán phụ 400ms bất kể tần số).

Tôi đã sử dụng Visual VM cũng để xem liệu có bất kỳ manh mối nào không.

Tôi nghĩ rằng đó là một số loại tiếp tục sống nhưng khi tôi chạy Apache Bench tôi nhận được nhanh hơn (sub 50ms) thời gian đáp ứng (rõ ràng là vì nó đánh nó thường xuyên).

Vậy làm cách nào để giữ độ trễ thấp không thường xuyên truy cập URL trong Tomcat? Có lẽ câu hỏi này là tốt hơn cho ServerFault?

CẬP NHẬT: Tôi gần như tích cực với sự cố Tomcat 6 của nó. Tôi nghĩ rằng tôi đã thử nghiệm trên Tomcat 7 nhưng tôi chỉ thử nghiệm một lần nữa vào nó và không có vấn đề (xem kết quả dưới đây). Ngay cả Tomcat 6 mới nhất vẫn có vấn đề này.

Đây là ab đầu ra cho Tomcat 6 (chú ý tối đa):

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 0.0  0  0 
Processing: 14 39 45.2  30  314 
Waiting:  14 38 45.2  30  314 
Total:   14 39 45.2  30  314 

Đây là ab đầu ra cho 7 thông báo Tomcat tối đa:

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  0 0 0.0  0  0 
Processing: 25 38 8.8  37  67 
Waiting:  25 37 8.7  36  66 
Total:   25 38 8.8  37  67 

phiên bản Các Tomcat là sự khác biệt duy nhất (cùng một máy, cùng JDK, v.v ...). Tôi nghĩ chắc chắn rằng Tomcat 6 mới nhất sẽ ổn nhưng nó có độ trễ tương tự theo yêu cầu đầu tiên.

+0

Nó thực sự phụ thuộc vào yêu cầu của bạn là gì. Bạn chỉ cần lấy một tập tin .html, hoặc là bạn đang khởi tạo một số loại dịch vụ dữ liệu, vv. – aglassman

+0

Bạn đang sử dụng openjdk? Tôi đã có một số vấn đề kỳ lạ với nó khi tôi đổi sang Oracle JDK. – Jaydee

+0

Có thể có một số loại GC đầy đủ 'ngăn chặn thế giới' ... Bạn đã kiểm tra đầu ra bộ thu gom rác chưa (chi tiết GC)? – home

Trả lời

1

Nhìn trộm vào mã tomcat Tôi quyết định tìm kiếm từ "Yếu" trên lý thuyết cho rằng vấn đề của bạn là một thứ gì đó trong tham chiếu yếu được thu thập khi bạn không yêu cầu lại nhanh chóng.

tôi đã đưa ra những phỏng đoán sau đây ... tôi thấy lớp thú vị này:

http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/javax/el/BeanELResolver.java?revision=1027187&view=markup

Dường như để duy trì một bộ nhớ cache của các đối tượng BeanProperties, một phần trong số đó được xử lý bởi một WeakHashMap, và bất cứ khi nào cache đầy, mọi thứ được đặt trong WeakHashMap và có thể được thu thập rác. Nếu các mục trong bản đồ yếu được yêu cầu, chúng được đưa trở lại bản đồ chính (không yếu). Nếu trang của bạn thực hiện hành vi này ngay khi kết thúc quá trình xử lý của bạn (bằng cách làm cho kích thước của bộ nhớ cache trong BeanProperties được thêm vào, bạn có thể làm mất đi gần như tất cả các mô tả đậu được lưu trong bộ nhớ cache. tài sản để điều chỉnh này:

private static final String CACHE_SIZE_PROP = 
    "org.apache.el.BeanELResolver.CACHE_SIZE"; 

vì vậy, có lẽ cố gắng chơi với điều đó và xem nó có ảnh hưởng đến hành vi này có thể không phải nó tuy nhiên vì tôi không thấy một sự thay đổi lớn (xem nhanh) trong lớp này trong Tomcat? 7 nơi bạn nói vấn đề của bạn biến mất.(bạn đã chỉnh sửa thuộc tính này trong các nỗ lực điều chỉnh trước của mình chưa?)

Các vấn đề liên quan