Tôi có một ứng dụng Java servlet trên Java 7 thường rất lành mạnh về mức tiêu thụ tài nguyên hệ thống. Thông thường việc sử dụng CPU trên máy chủ là dưới 50%. Tuy nhiên trong vài phút sau khi khởi động nó hoạt động rất khác nhau, đến mức mà CPU có thể trở thành pegged ở 100% trong vài phút nếu nó cố gắng để phục vụ rất nhiều lưu lượng truy cập trong thời gian đó. Kết quả là thời gian phản hồi chậm, thời gian chờ mạng, và thậm chí cả việc thu gom rác thải dài đôi khi tạm dừng.C2 Trình biên dịch bão hòa CPU lúc khởi động
Để chẩn đoán vấn đề, tôi mất một loạt các bãi chủ đề trong khi máy chủ đã được khởi động và tôi chạy -H đầu cùng một lúc. Bằng cách kết hợp từng chuỗi java với một pid, tôi có thể nhìn thấy một cách nhất quán C2 CompilerThread
bằng cách sử dụng nhiều CPU nhất. Tôi đã thực hiện nghiên cứu về chủ đề này và tôi hiểu rằng nó là một mã tối ưu hóa trình biên dịch Java dựa trên thống kê thời gian chạy. Nhưng từ tất cả các bài đọc tôi đã làm, tôi không thể nói cách tiếp cận tốt nhất để làm cho tình hình tốt hơn. Các tùy chọn duy nhất mà tôi có thể thu thập bao gồm:
- Chuyển từ C2 đến TieredCompiler (nhưng sẽ kết quả này trong việc thực hiện tốt hơn trong vài phút đầu tiên sau khi khởi động?)
- Bật -XX: + PrintCompilation để xem những gì là được tối ưu hóa (nhưng tôi phải làm gì với thông tin này? Tôi có thể buộc nó phải được tối ưu hóa trước khi máy chủ chấp nhận lưu lượng truy cập bằng cách nào đó không?)
Cách tiếp cận tốt nhất là gì và có các tùy chọn khác để thử và giảm bớt Sử dụng CPU sau khi khởi động?
Khi bạn tìm hiểu nơi mà tất cả các biên dịch mã đang diễn ra, hãy xem xét cách giảm nó. Điều này có nghĩa là xóa một thư viện đặc biệt đắt tiền. IMHO nó không phải là bình thường để có một số mã nhiều mà C2 đã dành nhiều thời gian biên dịch thời gian. –
Cảm ơn bạn. Tôi đã thử điều đó nhưng tôi không chắc chắn những gì tôi đang tìm kiếm. Chỉ các phương pháp được biên dịch thường xuyên nhất? Hoặc các phương pháp có nhãn "zombie đã tạo" hoặc "không được tham gia"? Không có gì rõ ràng nhảy ra ngoài với tôi. – Cameron
Gói nào biên dịch hầu hết các phương pháp I. E. Bình nào chết này đến từ đâu? –