2009-04-01 34 views
10

Những công cụ nào có sẵn để xem đầu ra của trình biên dịch JVM dựng sẵn? Ví dụ: Tôi đang bắt đầu JVM của mình với:Công cụ đồ họa giống như HPjmeter để xem -agentlib: đầu ra hồ sơ hprof

-agentlib:hprof=cpu=times,thread=y,cutoff=0,format=a,file=someFile.hprof.txt 

Điều này tạo ra đầu ra ở định dạng hprof ("JAVA PROFILE 1.0.1").

Tôi đã thành công trong quá khứ bằng cách sử dụng HPjmeter để xem các tệp đầu ra này một cách hợp lý. Tuy nhiên, vì lý do gì các tập tin được tạo ra bằng cách sử dụng phiên bản hiện hành của Sun JVM không tải trong phiên bản hiện tại của HPjmeter:

java.lang.NullPointerException 
    at com.hp.jmeter.f.jb.a(Unknown Source) 
    at com.hp.jmeter.f.a.a(Unknown Source) 
    at com.hp.c.a.j.z.run(Unknown Source) 
Exception in thread "HPeprofDataFileReaderThread" java.lang.AssertionError: null pointer exception from loader 
    at com.hp.jmeter.f.a.a(Unknown Source) 
    at com.hp.c.a.j.z.run(Unknown Source) 

(Tại sao họ sẽ xáo trộn những bytecode cho một sản phẩm miễn phí ?!)

Hai câu hỏi nảy sinh từ đây:

  1. Có ai biết nguyên nhân của lỗi HPjmeter này? (EDIT: Có - xem bên dưới)
  2. Công cụ nào khác tồn tại để đọc tệp hprof? Và tại sao không có từ Sun (có)?

Tôi biết Eclipse TPTP và các công cụ khác có thể theo dõi dữ liệu JVMTI khi đang bay, nhưng tôi cần một giải pháp mà có thể xử lý các tập tin được tạo hprof sau khi thực tế kể từ khi máy được triển khai chỉ có một JRE (không phải là một JDK) intalled .

EDIT: Một nhà phát triển HPjmeter rất hữu ích replied to question on an HP ITRC forum của tôi chỉ ra rằng heap=dump cần phải được bao gồm trong -agentlib tùy chọn tạm thời cho đến khi một lỗi trong HPjmeter là cố định. Thông tin này làm cho HPjmeter khả thi trở lại, nhưng tôi sẽ vẫn để câu hỏi mở để xem có ai biết về bất kỳ công cụ nào khác không.

EDIT: Kể từ phiên bản 4.0.00 của HPjmeter (có sẵn 05/2009) lỗi này đã được sửa.

Trả lời

0

Tôi không chắc chắn 100% nó sẽ hoạt động (có vẻ như nó sẽ) và tôi không chắc nó sẽ hiển thị ở định dạng bạn muốn ... nhưng bạn có nghĩ về số VisualVM không?

Tôi tin rằng nó sẽ mở tệp kết quả.

+1

VisualVM dường như chỉ tải thông tin "heap dump" (không phải dữ liệu lược tả) ra khỏi tệp hprof và apppears để treo tải tệp cho dù sao đi nữa. Bạn đã thành công với điều này chưa? Tôi đang thực sự tìm kiếm một cái gì đó> = HPJmeter hoạt động :-) –

+0

Thật không may tôi đã không sử dụng nó được nêu ra ... chỉ cần nhận thức của nó. Bạn đã thử sử dụng Visual VM để làm hồ sơ (nhưng có vẻ như bạn thực sự muốn một người xem offline)? – TofuBeer

+0

Vâng, chắc chắn có một loạt các công cụ tôi có thể sử dụng để cấu hình tại địa phương, nhưng nó sẽ là tốt đẹp để có một cái gì đó mà có thể hiển thị các tập tin hprof ẩn. HPJmeter rất gần, nếu tôi chỉ có thể làm cho nó hoạt động. Tôi ước họ phân phối mã nguồn. –

6

Your Kit Java Profiler có thể đọc ảnh chụp nhanh hprof (Tôi không chắc chắn nếu chỉ dành cho cấu hình bộ nhớ hoặc cho CPU). Nó không phải là miễn phí nhưng là bởi đến nay các profiler java tốt nhất mà tôi từng sử dụng. Nó trình bày kết quả một cách rõ ràng, trực quan và hoạt động tốt trên các tập dữ liệu lớn. Tài liệu cũng khá tốt.

+0

Nó sẽ xuất hiện từ tài liệu của họ rằng chúng chỉ hỗ trợ bộ nhớ các phần có liên quan của tệp HPROF: http://www.yourkit.com/docs/80/help/hprof_snapshots.jsp - cảm ơn bạn đã tham khảo; nó trông giống như một hồ sơ tốt. –

0

Tôi đã sử dụng Eclipse Memory Analyzer để phân tích các vấn đề hiệu suất khác nhau thành công. Trước hết, hãy cài đặt công cụ như được mô tả trong trang web của dự án trong Eclipse.

Sau đó, bạn có thể tạo một tập tin dump biết pid của JVM để được phân tích

jmap -dump:format=b,file=<filename>.hprof <jvm_pid> 

Sau đó chỉ cần nhập các tập tin .hprof trong nhật thực. Nó có một số báo cáo tự động mà cố gắng (đối với tôi họ thường không làm việc) để chỉ ra đó có thể là vấn đề có thể.

Edit:

trả lời bình luận: Bạn nói đúng, nó là giống như một công cụ tìm rò rỉ cho Java. Đối với các vấn đề hiệu suất, tôi đã chơi với JRat cho các dự án nhỏ. Nó cho thấy thời gian comsumed mỗi phương pháp, số lần một phương pháp được gọi là, hệ thống phân cấp của các cuộc gọi, vv Vấn đề duy nhất là theo như tôi biết, nó không hỗ trợ các tập tin .hprof. Để sử dụng nó, bạn cần thực hiện chương trình của bạn để thêm đối số VM

-javaagent:<path>/shiftone-jrat.jar 

Điều này sẽ tạo một thư mục có hồ sơ được công cụ ghi lại. Sau đó, thực hiện

java -jar shiftone-jrat.jar 

Và mở theo dõi. Thậm chí là một công cụ đơn giản, tôi nghĩ nó có thể hữu ích.

+1

Tôi đã chơi với MAT một thời gian trước đây, nhưng hồi ức của tôi là nó chỉ phân tích phần HEAP DUMP của tệp hprof, không phải là phần lược tả hiệu suất. Họ đã thêm chức năng đó chưa? –

0

Để xem và phân tích kết quả của hprof=samples hoặc hprof=cpu Tôi đã sử dụng PerfAnal với kết quả tốt. GUI là một chút spartan, nhưng rất hữu ích.

PerfAnal là bản tải xuống miễn phí (GPL, ban đầu là một dự án ví dụ trong cuốn sách Lập trình Java trên Linux). Xem bài viết này:

http://www.oracle.com/technetwork/articles/javase/perfanal-137231.html

để biết thêm thông tin và tải về.

Thông thường bạn chỉ có thể chạy

java -jar PerfAnal.jar hprof.java.txt 

Bạn có thể cần phải fiddle với -Xmx cho các tập tin hprof lớn.

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