2010-10-18 22 views
7

Tôi có một Tomcat đang chạy như một Dịch vụ Windows, và chúng được biết là không hoạt động tốt với jstack. jconsole đang hoạt động tốt, mặt khác, và tôi có thể thấy các ngăn xếp của các luồng riêng lẻ (tôi đang kết nối đến "localhost: port" để truy cập nó).Làm cách nào để tạo kết xuất chuỗi thông qua JMX?

Tôi có thể sử dụng jconsole hoặc công cụ tương tự như thế nào để đổ tất cả các ngăn xếp chuỗi vào một tệp? (tương tự như jstack)

Trả lời

5

Bạn có thể sử dụng giao diện quản lý ThreadMXBean.

Lớp học FullThreadDump này chứng minh khả năng nhận được kết xuất chuỗi đầy đủ và cũng phát hiện bế tắc từ xa bằng JMX.

3

Đây là một mẫu mã mà sẽ viết một chồng đổ vào một tệp:

http://pastebin.com/zwcKC0hz

Chúng tôi sử dụng này trên JMX để cung cấp cho chúng tôi một xấp xỉ của đống đổ bạn nhận được khi bạn thực hiện một yêu cầu JMX hoặc nếu quá trình phát hiện tải cao, bất ngờ.

4

Ngày nay bạn có thể sử dụng công cụ jvisualvm để kết nối với JVM từ xa của bạn thông qua JMX và tạo kết xuất chuỗi. Không biết nếu điều này là có sẵn

Java VisualVM

+1

Tốc độ cực kỳ chậm :( –

1

Nó sẽ rất hữu ích nếu bạn có một ghi âm chuyến bay để có được một cái nhìn sâu hơn về các hành vi JVM, đặc biệt tập trung vào các phương pháp nóng.

Thông thường, ghi âm trong nửa giờ là đủ. Để kích hoạt một ghi âm, bạn phải đăng nhập vào máy, và ban hành các lệnh sau:

Nếu sử dụng Java HotSpot 1.8.x:

$ JAVA_HOME/bin/jcmd VM.unlock_commercial_features $ JAVA_HOME/bin/jcmd JFR.start thời gian = năm 1800 settings = hồ sơ filename =/tmp/recording.jfr

NẾU sử dụng java HotSpot 1.7.x:

chỉnh sửa $ HOME/conf/file wrapper.conf của bạn bằng cách thêm những điều sau đây thông số khi khởi động JVM:

wrapper.java.additiona = - XX:. + UnlockCommercialFeatures wrapper.java.additional = - XX:. + FlightRecorder

(thay thế với số lượng vị trí tương ứng)

Sau đó, đã thể hiện của bạn khởi động lại. Khi đã xong, dùng lệnh sau đây:

$ JAVA_HOME/bin/jcmd thời gian JFR.start = thiết lập năm 1800 = hồ sơ filename =/tmp/recording.jfr

Việc ghi chuyến bay wil tạo ra một tập tin trên/tmp/recording.jfr khi chấm dứt.