2008-10-09 35 views
155

Tôi có một máy chủ sản xuất chạy với cờ sau: - XX: + HeapDumpOnOutOfMemoryErrorTôi làm cách nào để phân tích tệp .hprof?

Đêm qua nó tạo ra một file java-38942.hprof khi máy chủ của chúng tôi gặp phải một lỗi heap. Nó chỉ ra rằng các nhà phát triển của hệ thống biết về lá cờ nhưng không có cách nào để có được bất kỳ thông tin hữu ích từ nó.

Bất kỳ ý tưởng nào?

Trả lời

156

Nếu bạn muốn có một công cụ khá tiên tiến để làm một số nghiêm trọng poking xung quanh, nhìn vào the Memory Analyzer project tại Eclipse, đóng góp cho họ bởi SAP.

Một số của những gì bạn có thể làm là tâm-blowingly tốt cho việc tìm kiếm lỗ hổng bộ nhớ vv - bao gồm chạy một hình thức SQL hạn chế (OQL) chống lại các đối tượng trong bộ nhớ, tức là

CHỌN toString (firstName) FROM com.yourcompany.somepackage.User

Hoàn toàn rực rỡ.

+15

Tôi chỉ muốn thêm +100 cho Trình phân tích bộ nhớ Eclipse. Tôi hiện đang cố gắng để sàng lọc thông qua một tập tin đống đống 400MB +, và phải mất hơn 70 phút để đọc tập tin, trước khi nó gây ra một vụ tai nạn JVM hoàn chỉnh. EMA có thể mở nó trong <5 phút. –

+2

Quá xấu MAT thường không đọc đống ... :-( –

+2

Tôi tiếp tục nhận được lỗi phân tích cú pháp khi mở tệp HPROF bằng cách sử dụng Trình phân tích bộ nhớ Eclipse (thực tế là cũng đã bị Eclipse loại bỏ!) Không may .. sigh –

40

Bạn có thể sử dụng JHAT, Công cụ phân tích cú pháp Java được cung cấp theo mặc định với JDK. Đó là dòng lệnh nhưng bắt đầu một máy chủ web/trình duyệt mà bạn sử dụng để kiểm tra bộ nhớ. Không thân thiện với người dùng nhất, nhưng ít nhất nó đã được cài đặt hầu hết các nơi bạn sẽ đi. Một khung nhìn rất hữu ích là liên kết "biểu đồ đống" ở phía dưới cùng.

ví dụ: jhat -port 7401 -J-Xmx4G dump.hprof

jhat có thể thực hiện OQL "những ngày này" cũng như (liên kết dưới "thực hiện OQL")

+2

Tôi không thể chấp nhận câu trả lời của bạn cho đến khi bạn cập nhật liên kết. –

+0

Xong, xin lỗi vì lỗi đánh máy. – CMS

+0

Rõ ràng việc sửa chữa câu trả lời không đủ để đền đáp người hỏi ... – rogerdpack

9

Chỉ cần lấy Eclipse Memory Analyzer. Không có gì tốt hơn ngoài kia và hoàn toàn miễn phí.

JHAT là chỉ có thể sử dụng cho "các ứng dụng đồ chơi"

+3

JHAT là cần thiết để gây ấn tượng với những kẻ tấn công "l33t", những người đã tạo ra bản phân phối BSD bắt đầu bằng LILO. Hãy chờ ... họ sẽ không bao giờ sử dụng java .--) –

+0

Tôi nghĩ đây là một nhận xét ...: \ – rogerdpack

28

Bạn cũng có thể sử dụng HeapWalker từ Netbeans Profiler hoặc công cụ Visual VM độc lập. Visual VM là một lựa chọn tốt cho JHAT vì nó độc lập, nhưng dễ sử dụng hơn JHAT.

Bạn cần Java 6+ để sử dụng đầy đủ Visual VM.

+0

Bạn nên thêm một lưu ý rằng điều này chỉ dành cho Java 6 và 7. –

+0

AFAIK, HeapWalker và VisualVM không yêu cầu Java 6/7 để đọc các tệp HPROF. –

+0

Tôi chỉ cố gắng tải nó với Java 5 và nó nói 'Hãy sử dụng Java 6 hoặc 7' Tôi đang làm gì sai? –

7

YourKit Java Profiler dường như cũng xử lý chúng.

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