Tôi đang gọi API Java của nhà cung cấp và trên một số máy chủ, dường như JVM đi vào vòng lặp ưu tiên thấp sau khi đăng nhập vào API (CPU ở mức sử dụng 100%). Ứng dụng tương tự trên các máy chủ khác không thể hiện hành vi này. Điều này xảy ra trên WebSphere và Tomcat. Môi trường là khó khăn để thiết lập vì vậy rất khó để cố gắng làm một cái gì đó giống như lược tả trong Eclipse.Nếu bạn có một ứng dụng Java đang tiêu thụ CPU khi nó không làm bất cứ điều gì, làm thế nào để bạn xác định nó đang làm gì?
Có cách nào để cấu hình (hoặc một số phương pháp kiểm tra khác) một ứng dụng Java hiện có đang chạy trong Tomcat để tìm ra phương thức nào đang được thực thi trong khi nó ở trạng thái spinwait này không? Ứng dụng chỉ thực hiện một phương thức khi nó ở trạng thái này (phương thức của nhà cung cấp). Nhà cung cấp không thể nhân rộng hành vi (tất nhiên).
Cập nhật:
Sử dụng JConsole tôi đã có thể xác định xem ai được chạy và những gì họ đang làm. Tôi mất một vài giờ để tìm ra lý do tại sao nó đã làm nó. Vấn đề cuối cùng là lọ API của nhà cung cấp đang được sử dụng không khớp chính xác với cấu hình cơ sở dữ liệu mà nó đang sử dụng. Nó đã được mặc định để có truy tìm và theo dõi hiệu suất được kích hoạt trên các máy chủ đã có một chút sai khớp trong cấu hình. Tôi đã sử dụng một cái lọ khác và tất cả đều tốt.
Vì vậy, cảm ơn, Joshua, cho câu trả lời của bạn. JConsole cực kỳ dễ cài đặt và sử dụng để theo dõi một ứng dụng hiện có.
@Cringe - Tôi đã thực hiện một số thử nghiệm với một số tùy chọn bạn đã đề xuất. Tôi đã có một số vấn đề với việc thiết lập JProfiler, có vẻ tốt (nhưng đắt tiền). Về sau, tôi đã tiếp tục và thêm vào trình cắm thêm Profiler Eclipse và tôi sẽ xem qua các trình biên dịch nguồn mở khác nhau để so sánh các chức năng.
++ Theo ý kiến của tôi, việc chụp nhiều ảnh không chỉ là cách nhanh chóng để tìm ra thời gian, nó cũng là tốt nhất. –