2009-06-25 40 views

Trả lời

4

bạn có thể sử dụng jconsole hoặc jstack cả trong thư mục bin của JDK của bạn. Đặc biệt, jconsole cho phép bạn kết nối với quá trình của bạn và theo dõi các chủ đề bao gồm các tài nguyên mà họ đã khóa, và nó có thể giúp bạn xác định trạng thái bế tắc.

+2

Tôi nghĩ câu hỏi liên quan đến một số thống kê về sự tranh chấp khóa trong khi chạy ứng dụng - đó là các khóa nóng trong hệ thống. – akarnokd

2

VisualVM (Một phần của Java 1,6) (see)

+0

Không VisualVM yêu cầu một plugin riêng biệt cho điều đó? – akarnokd

2

JDK có một số hỗ trợ tích hợp - theo unix, giết -3 quá trình, dưới cửa sổ, ctrl-break. Điều này sẽ hiển thị một bãi chứa thread hoàn chỉnh, theo sau là bất kỳ deadlocks phát hiện. Thêm vào đó, trong chuỗi dusmp bạn có thể thấy những gì chủ sở hữu những gì khóa, và so sánh chúng với nhau.

+1

Bạn không cần phải giết quá trình để có được một bãi chứa thread - chỉ cần chạy jstack trong đó là id quá trình. –

+3

Lệnh kill -3 không giết quá trình. Nó chỉ báo hiệu nó, nhưng quá trình sẽ tiếp tục chạy. –

3

Bạn cũng có thể xem điều này trong trình gỡ lỗi của nhật thực. Trong chế độ xem Gỡ lỗi, hãy sử dụng trình đơn hình tam giác nhỏ xuống trên thanh công cụ chế độ xem để bật "Java-> Hiển thị màn hình".

Khi bạn nghi ngờ bế tắc, hãy tạm dừng ứng dụng (chọn ứng dụng trong giao diện gỡ lỗi và nhấn nút tạm dừng trên thanh công cụ gỡ lỗi) và nếu có bế tắc, chủ đề chặn sẽ chuyển sang màu đỏ. Nếu bạn mở rộng các chủ đề đó, bạn có thể thấy sự tranh chấp khóa.

2

Nếu bạn sở hữu mã, bạn có thể tạo/tìm kiếm triển khai Khóa tập hợp thống kê tranh chấp. Nếu không, hãy thử các công cụ được đề xuất trong các bài đăng khác.

+0

bạn có bất kỳ ví dụ nào về loại triển khai này không (ví dụ: mã java) – Rhubarb

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