2010-02-11 26 views
7

Gần đây tôi đã tìm hiểu về các tình huống yêu cầu khởi động ứng dụng (với yêu cầu thông lượng cao) trước khi chúng bắt đầu phân phát các yêu cầu thực. Logic đằng sau điều này là để cho phép JIT thực hiện phép thuật hiệu suất của nó!Làm nóng các ứng dụng Java thông lượng cao

Đây có phải là tiêu chuẩn cho các ứng dụng Java hay thường được thực hiện cho các ứng dụng bộ nhớ nặng (dấu chân)?

+1

Điều chỉnh hiệu suất ít hơn về "tìm hiểu về các tình huống" hơn là đo lường và phân tích những gì xảy ra trong ** các trường hợp cụ thể ** của bạn. – flybywire

+0

Xem thêm câu hỏi của tôi: http://stackoverflow.com/questions/1481853/technique-or-utility-to-minimize-java-warm-up-time – noahlz

Trả lời

11

Nếu bạn đang nói về trang web/trang web có lưu lượng truy cập cao thì JIT là một vấn đề rất nhỏ. Vấn đề lớn nhất là khởi động (populating) tất cả các lớp bộ nhớ cache bạn sẽ cần phải có. Ví dụ: ehcache regions which are being populated from hibernate. Đó là bởi vì các hoạt động liên quan đến IO là các đơn đặt hàng có cường độ chậm hơn bất cứ điều gì xảy ra bên trong CPU (trừ khi bạn tính toán các bẻ gãy):

+2

+1 cho "trừ khi bạn tính toán số điểm". – z5h

+0

Cảm ơn con trỏ nhưng tôi nghĩ rằng tôi đang đề cập đến việc làm ấm đường dẫn mã thay vì dữ liệu "đắt tiền". Tôi đặc biệt băn khoăn liệu các ứng dụng Java lớn có được làm ấm trước đặc biệt xem xét rằng các JVM ngày nay đủ thông minh để quyết định đường dẫn mã nào được truy cập rất nhiều và do đó lưu vào bộ nhớ JIT cho chúng ... Chắc chắn có một perf. hit khi JITing lần đầu tiên và do đó tôi muốn biết nếu trong cuộc sống thực, bất cứ ai đã phải đối mặt với vấn đề này có thể đã khuyến khích họ để làm ấm ứng dụng của họ và nếu như vậy thì những gì perf. những cải tiến mà họ đã thấy. –

+1

@Aayush Puri: và câu trả lời của tôi là nếu bạn đang nói về webapp thì JIT warmup là 0,01% quan trọng nên trong đời thực (và trong bối cảnh webapps) mọi người có vấn đề lớn hơn để giải quyết (warmup cho database, cache vv) – cherouvim

5

Câu hỏi đặt ra là, khi nào bạn muốn hãy làm theo cách này ?

Nếu bạn tung ra một ứng dụng web, và nó là NGAY LẬP TỨC sống, sau đó trong khi bạn đang "làm nóng" nó, bạn đang thêm tải phụ, đó là phản tác dụng. Tương tự cũng đúng khi một ứng dụng máy tính để bàn khởi động. Không có điểm nóng lên nếu người dùng sẽ bắt đầu sử dụng ngay lập tức. Hoặc tệ hơn, không cho phép người dùng tương tác trong khi bạn đang làm ấm ứng dụng.

Nếu bạn tung ra một ứng dụng web, và bạn kiểm tra việc triển khai trước khi bạn trỏ cân bằng tải của bạn vào nó, sau đó bạn đã làm ấm nó như là một kết quả phụ.

+0

Cá nhân, _I_ sẽ đi ra khỏi con đường của tôi để làm điều này khi tôi làm bài kiểm tra hiệu suất. Hoặc khi tôi có một cụm, và khởi động một máy trước khi cắm nó vào cụm không ảnh hưởng đến người dùng. –

+0

Nhưng nếu môi trường sản xuất của bạn không có lợi ích của sự nóng lên, tại sao bạn muốn nghiêng kết quả kiểm tra hiệu suất của bạn bằng cách làm ấm lên trong môi trường thử nghiệm hiệu suất? – zkarthik

+0

Tôi hoàn toàn đồng ý rằng nó chỉ có ý nghĩa để làm ấm lên một ứng dụng trước khi thêm nó vào cân bằng tải của bạn. –

4

Ngoài cherouvim's answer, tôi có thể nghĩ đến một vài vấn đề khác mà yêu cầu khởi động:

  • Objects instantiation (tải lười biếng, độc thân, vv);
  • Phân bổ đống (nếu số Xms của bạn nhỏ hơn Xmx).

Tôi tưởng tượng rằng hệ điều hành cũng tự điều chỉnh hành vi của ứng dụng để cuộc gọi hệ điều hành cũng có thể bị ảnh hưởng bởi thời gian khởi động.

Hầu hết các yếu tố trên (bộ nhớ cache, khởi tạo đối tượng) không dành riêng cho Java.

+0

+1: Hệ điều hành lưu trữ tập tin có thể là một yếu tố lớn. – erickson

+0

> Phân bổ đống (nếu Xms của bạn nhỏ hơn Xmx). Điểm tốt. Và tôi tin rằng đó là lý do tại sao nó được cho là đặt Xmx = Xms –

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