2010-08-19 25 views
5

Tôi đang chạy tải với Tomcat 6 chạy trên Java 6. Tôi muốn thu thập một đống heapdump của Java trong khi máy chủ Tomcat đang được tải. Tôi thường sử dụng jmap -dump để thu thập heapdumps của tôi.Thu thập đống heapdump của Java dưới tải

Tuy nhiên, khi tôi cố gắng thực hiện điều này khi Tomcat đang xử lý tải trọng cao, tôi thấy rằng bộ sưu tập heapdump không thành công.

Jmap có phải là công cụ tốt nhất để thu thập khối đống từ quá trình đang tải không? Những nguyên nhân nào có thể khiến cho jmap không thu thập được đống rác?

Nếu jmap không phải là công cụ tốt nhất - điều gì tốt hơn?

Hoàn toàn có thể chấp nhận đối với tôi đối với jmap (hoặc một số công cụ khác) để ngăn chặn thế giới trong quá trình Java trong khi vùng lưu trữ đống được thực hiện.

+1

Bạn đã cố gắng đính kèm VisualVM vào máy ảo và tạo một HeapDump bằng cách sử dụng? –

+0

Điều này không lý tưởng đối với tôi vì Tomcat của tôi đang chạy trên một máy chủ Linux từ xa. VisualVM bao gồm hỗ trợ cho các vùng heap từ xa nhưng điều này đòi hỏi một cổng JMX được mở khi JVM được khởi động. – mchr

+0

http://stackoverflow.com/questions/20235802/ways-how-to-get-heap-dump-from-running-tomcat-7 có câu trả lời chi tiết hơn. – Vadzim

Trả lời

2

Tôi thấy rằng chạy Tomcat với cổng JMX cho phép tôi lấy một vùng heapdump từ xa bằng visualvm. Điều này đã thành công đối với tôi khi jmap thất bại.

2

Jmap có phải là công cụ tốt nhất để thu thập khối đống từ quá trình đang tải không?

Tôi nghĩ: Không phải vậy. From this link:

LƯU Ý - Tiện ích này không được hỗ trợ và có thể hoặc không thể có sẵn trong phiên bản tương lai của JDK.

+0

Bạn có thể giới thiệu phương án thay thế không? – mchr

+0

Không, tôi không bao giờ cần thiết để đối phó với đống bãi, nhưng tôi đã tìm kiếm thông tin jmap, chỉ tò mò, có được may mắn. – sourcerebels

2

Tôi cũng tìm thấy jmap có thể khá nhiệt tình. Nếu bạn gặp sự cố:

  • Hãy thử lại. Nó thường quản lý để có được một đống đổ sau một vài nỗ lực nếu nó lần đầu tiên thất bại
  • Sử dụng tùy chọn -F
  • Thêm -XX: + HeapDumpOnOutOfMemoryError như một cấu hình tiêu chuẩn để chủ động lấy đống bãi khi một lỗi oom được ném
  • Chạy Tomcat một cách tương tác và thêm dấu gạch ngang vào tùy chọn ctrl-break. Điều này cũng cung cấp cho bạn một chuỗi kết thúc, có thể bạn sẽ cần một thứ gì đó, ví dụ:
  • Nếu kích thước heap của bạn đặc biệt lớn và bạn có điều kiện lặp lại, tạm thời giảm kích thước heap của bạn. Nó làm cho tệp kết quả dễ xử lý hơn, mất ít thời gian hơn và có nhiều khả năng thành công hơn
+0

Cảm ơn câu trả lời này - Tôi sẽ thử thử lại jmap lần sau. Tôi đã đăng câu trả lời của riêng mình về việc sử dụng visualvm. – mchr

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