Tôi có một chương trình lớn trong Java sử dụng đa luồng. Trong một số trường hợp, chương trình bắt đầu sử dụng 100% ba lõi của hệ thống tám lõi của tôi. Trong sử dụng bình thường, chương trình sử dụng tất cả các lõi ở mức 1-2%. Làm thế nào tôi có thể tìm thấy các lớp đó là quá tải lõi?Làm cách nào để tìm lớp học chuyên sâu về CPU trong Java?
Trả lời
Thử lấy chuỗi đề xuất (xem jps, lệnh jstack) và sau đó xem phương thức nào được thực thi.
Chỉ cần xem các phương pháp nào được thực hiện thường xuyên nhất không giống như tìm ra nơi chương trình dành hầu hết thời gian xử lý của nó. – Jesper
@Jesper: Thực hiện điều này một số lần như 10, sau đó tìm kiếm các câu lệnh trên nhiều mẫu ngăn xếp. Sau đó, phần của các mẫu chứa một dòng là phần thời gian mà dòng đó chịu trách nhiệm và sẽ không được chi tiêu nhưng cho dòng đó. Khái niệm "nơi chương trình dành thời gian của mình" bỏ qua trách nhiệm của các cuộc gọi phương thức gây ra thời gian để chi tiêu ở các cấp thấp hơn. –
@Mike Quan điểm của tôi là bạn nên đo lượng thời gian được sử dụng trong các phần của chương trình, không chỉ bao nhiêu lần các phương thức được gọi. Bạn có thể có một phương thức được gọi là 1.000 lần nhưng chỉ sử dụng 10% thời gian, hoặc một phương thức được gọi là 100 lần nhưng sử dụng 90% thời gian của chương trình. Để tối ưu hóa, bạn phải tập trung vào phương pháp ít được gọi hơn trong trường hợp này. – Jesper
Sử dụng một hồ sơ như jvisualvm mà đi kèm với jdk-1.6.0_10
Bạn có thể muốn tìm vòng lặp chờ bận : '(while! done) {}'. Hiếm khi một chuỗi được viết chính xác sẽ làm việc có ý nghĩa ở 100%, thường tính toán đôi khi bị chặn bởi I/O hoặc đồng bộ. - một đồ thị sử dụng CPU tốt nên trông hơi lượn sóng. – Justin
Sử dụng một hồ sơ để tìm ra chủ đề (s) đang sử dụng tất cả các chu kỳ CPU của bạn, và các phương pháp (s) mà họ đang thực thi.
Nếu bạn đang sử dụng Eclipse, bạn có thể sử dụng TPTP profiling tool.
Nếu bạn đang đi tuyến đường profiler thương mại thì tôi khuyên bạn nên sử dụng Dynatrace.
Vô lý tốn kém cả về mặt tài chính và về chi phí. http://williamlouth.wordpress.com/2010/05/25/the-java-application-performance-management-vendor-showdown/ –
Tôi không chắc là đắt tiền thế nào nhưng tôi thấy nó hữu ích hơn JProbe .Dynatrace đường dẫn tinh khiết rất kỹ lưỡng và phá vỡ các báo cáo xuống độc đáo ở cấp độ phương pháp, mức sql, cấp api. Bạn có thể sử dụng trình lược tả ứng dụng khách để xem thực thi tập lệnh java, thời gian cuộc gọi ajax, thời gian hiển thị, thời gian mạng. Tôi chắc chắn nó có thể có giá. Đó là lý do tại sao tôi nói nếu OP chi tiêu số tiền để có được một thương mại, ông có thể kiểm tra xem nó ra. – CoolBeans
Nếu bạn đang sử dụng Java trên UNIX hoặc một số phiên bản Linux nhìn vào DTrace với Java.
Trên thực tế, các đầu dò dtrace cho JVM khá tốn kém khi chạy. Đầu dò OpenCore so với Đầu dò Java DTrace http://opencore.jinspired.com/?page_id=190 –
Giải pháp tốt nhất là sử dụng một hồ sơ - đó là những gì họ đang xây dựng cho, và có một tuyệt vời đi kèm với Java 6.
khác (xa là như lý tưởng một giải pháp) là để chạy chương trình của bạn trong IDE Eclipse (nếu đó là những gì bạn sử dụng) trong chế độ gỡ lỗi. Sau đó, bạn có thể xem các chuỗi đang chạy. NẾU nhiều người trong số họ bị đình chỉ, một trong đó không phải là thủ phạm của bạn. Buộc nó để phá vỡ (từ thanh công cụ) và bạn có thể nhìn thấy nó ở đâu. Có rất nhiều cơ hội mà bạn sẽ tìm thấy một vòng lặp rõ ràng hoặc chờ đợi bận rộn.
- 1. Ví dụ tính toán CPU chuyên sâu?
- 2. Làm cách nào để theo dõi các yêu cầu chuyên sâu của CPU trong mod_perl?
- 3. Quá trình con cho nhiệm vụ chuyên sâu CPU?
- 4. Tại sao Thread.Sleep() lại là CPU chuyên sâu?
- 5. Tìm kiếm hướng dẫn phát triển bàn phím chuyên sâu
- 6. PHP Framework cho ứng dụng chuyên sâu về hình thức
- 7. Chuyên môn không chuyên môn về mẫu lớp
- 8. Force Eclipse để bỏ qua các lớp học thử nghiệm về tìm kiếm Java
- 9. Làm thế nào để tìm thấy trong Eclipse lớp học nào thực hiện nhiều giao diện?
- 10. Làm thế nào để (đơn vị) kiểm tra dữ liệu chuyên sâu PL/SQL ứng dụng
- 11. chuyên môn về phương pháp mẫu bên trong lớp mẫu
- 12. Cách tìm Jar mà một lớp Java thuộc về
- 13. mnesia: chuyên sâu sử dụng bảng
- 14. Tài nguyên để học về Generics Java?
- 15. Tôi làm cách nào để hạn chế lớp học chỉ trong lớp khác?
- 16. Tìm các lớp học có sẵn trong Học phần
- 17. Các tùy chọn tốt nhất hiện tại để song song ứng dụng .NET chuyên sâu CPU là gì?
- 18. học css ngày càng chuyên nghiệp
- 19. Từ Maven, làm cách nào để chạy một lớp học sống dưới src/test/java?
- 20. Làm cách nào để lớp học dễ kiểm tra hơn?
- 21. lớp học một phần java
- 22. Làm cách nào để thực hiện các tác vụ tính toán chuyên sâu trong ứng dụng AngularJS?
- 23. Cách JVM bắt đầu tìm kiếm các lớp học?
- 24. Cách hiệu quả để lưu dữ liệu vào đĩa trong khi đang chạy một tác vụ tính toán chuyên sâu
- 25. java cách sử dụng các lớp học trong gói khác?
- 26. Nghiên cứu chuyên sâu về các loại hệ thống và lý thuyết loại
- 27. Tại sao các chuyên môn về mẫu chức năng không được phép bên trong một lớp học?
- 28. Java - Làm cách nào để sử dụng tệp lớp?
- 29. Java: Làm cách nào để tìm ra phương thức được ghi đè từ lớp cơ sở?
- 30. Làm cách nào để thực hiện tìm nạp "sâu" trong JPQL?
Nói chung, một lớp không quá tải máy của bạn, một phương pháp cụ thể có thể là. – Uri