2009-06-04 30 views
34

Nếu một quá trình bị treo và rời khỏi một bãi chứa lõi hoặc tôi tạo một cái với gcore thì làm thế nào tôi có thể phân tích nó?Làm cách nào để phân tích thông tin từ vùng kết xuất lõi Java?

Tôi muốn có thể sử dụng jmap, jstack, jstat v.v ... và cũng để xem giá trị của tất cả các biến.

Bằng cách này tôi có thể tìm ra lý do cho JVM bị lỗi hoặc bị đóng băng.

+0

Vùng kết xuất lõi Java là gì? Bạn đang đề cập đến theo dõi ngăn xếp của ứng dụng hoặc đã làm các JVM sụp đổ dẫn đến một bãi chứa lõi? –

+1

Chúng ta có thể chuyển đổi nó thành một wiki không? Đây không phải là một câu hỏi lập trình. Nó, tuy nhiên, rất có liên quan cho bất kỳ lập trình java trên nền tảng Unix. Chuyển sang softwarerecs .. là một lựa chọn khác. Trong mọi trường hợp, vui lòng không xóa điều này .. – Jayan

Trả lời

0

IBM cung cấp một số công cụ có thể được sử dụng trên mặt trời jvm. Hãy xem xét một số dự án trên alphaWorks, họ cung cấp một đống và chủ đề phân tích bãi

Karl

0

tôi khuyên bạn nên thử Netbeans Profiler Nó có tập hợp phong phú các công cụ để phân tích thời gian thực. Các công cụ từ IbM rất đáng để thử phân tích ngoại tuyến

5

Bạn có chắc chắn một kết xuất lõi là những gì bạn muốn ở đây không? Điều đó sẽ chứa các đường ruột thô của JVM đang chạy, thay vì thông tin cấp java. Có lẽ một bãi chứa JVM heap là nhiều hơn những gì bạn cần.

35

OK nếu bạn đã tạo kết xuất lõi bằng gcore hoặc gdb thì bạn sẽ cần chuyển đổi nó thành một tệp được gọi là tệp HPROF. Chúng có thể được sử dụng bởi VisualVM, Netbeans hoặc Công cụ phân tích bộ nhớ của Eclipse (trước đây là SAP Memory Analyzer). Tôi muốn giới thiệu Eclipse MAT.

Để chuyển đổi tệp, hãy sử dụng công cụ dòng lệnh jmap.

# jmap -dump:format=b,file=dump.hprof /usr/bin/java core.1234 

nơi:

dump.hprof là tên của tập tin hprof bạn muốn tạo

/usr/bin/java là đường dẫn đến phiên bản của nhị phân java mà đã tạo vùng kết xuất lõi

core.1234 là tệp cốt lõi thông thường của bạn.

+0

Chúng ta có thể chuyển đổi tệp kết xuất lõi 1,4 jdk được tạo bằng gcore thành hprof trên solaris bằng jdk1.5/bin/jmap không? Tôi đã thử bằng cách sử dụng lệnh trên nhưng nó cung cấp cho các lỗi: Lỗi gắn vào tập tin lõi: không thể tìm thấy 'UseSharedSpaces' cờ – techzen

+0

techzen: Tôi không chắc chắn về điều này tôi sợ .. là bạn chắc chắn tham khảo 1.4 java thực thi trên dòng lệnh? Nếu vậy thì nó có thể chỉ là các bãi chứa 1.4 lõi không tương thích. – chillitom

+0

Có thể sử dụng jmap để chuyển đổi tệp mdmp do JVM tạo ra khi nó bị lỗi (http://docs.oracle.com/cd/E15289_01/doc.40/e15059/crash.htm) không? – Greenhand

2

Thực ra, VisualVM có thể xử lý kết xuất lõi ứng dụng.

Chỉ cần gọi "File/Add VM Coredump" và sẽ thêm ứng dụng mới vào trình khám phá ứng dụng. Sau đó, bạn có thể lấy kết xuất chuỗi hoặc kết xuất đống của JVM đó.

+0

file thêm vm coredump là chuyển sang màu xám cho tôi. Không chắc chắn tại sao chính xác – visch

+0

Nếu bạn đang ở trên cửa sổ, nó không được hỗ trợ và sẽ không được chuyển sang màu xám. Tôi ở cùng một chiếc thuyền. http://visualvm.java.net/coredumps.html Nút Dump lõi có thể nhìn thấy trong cửa sổ Ứng dụng nếu VisualVM đang chạy trên Solaris hoặc Linux. –

6

Nếu bạn đang sử dụng một IBM JVM, download các IBM Chủ đề và Giám sát Dump Analyzer. Nó là một công cụ tuyệt vời. Nó cung cấp chi tiết thread và có thể chỉ ra deadlocks, vv blog post sau đây cung cấp một cái nhìn tổng quan tốt đẹp về cách sử dụng nó.

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