2013-02-27 55 views
1

外部工具給我帶來麻煩。有沒有辦法獲得簡單的CPU使用/每個功能花費的時間,而不使用一些外部GUI工具?我一直試圖用VisualVM來剖析我的java程序,但是我有可怕的,靈魂壓碎,野心殺人的結果。它只會顯示堆使用情況,我感興趣的是CPU使用情況,但該面板只是表示不支持此JVM。順便說一下,不會告訴我使用哪個JVM。我已經下載了JDK 6並使用它來啓動它,我確保我的程序針對同一個虛擬機,但沒有任何東西!仍然是一樣的,無益的錯誤信息。 我的需求非常簡單。我只想知道節目花在哪裏。 Python有一個很好的內置分析器,可以打印每個函數花費的時間,包括每次調用和總時間格式。這是我現在正在尋找的範圍。任何人有任何建議?有沒有辦法在不使用外部工具的情況下剖析java應用程序?

+0

我沒有看到任何方式讓你做這個***沒有***外部工具。你真的只是在尋找那個,或者只是建議那些會做你所問的,不是VisualVM的人嗎? – sharakan 2013-02-27 21:04:08

+0

@sharakan - 好吧,我會解決什麼問題。我對'pythonic'有希望,其中'main()'是分析器的一個參數,然後它簡單地執行程序並打印出結果,但如果這樣的事情不存在,我可以接受建議無論什麼作品。 – 2013-02-27 21:07:52

+0

使用visualvm插件可能的解決方法:http://stackoverflow.com/questions/1755819/cpu-and-profiling-not-supported-for-remote-jvisualvm-session – sharakan 2013-02-27 21:21:14

回答

2

這並不美觀,但您可以使用內置hprof分析機制,方法是在命令行中添加一個開關。

-Xrunhprof:cpu=times 

有很多選擇可用;有關更多信息,請參閱HPROF的Oracle文檔頁面。

因此,舉例來說,如果你有你想剖析一個可執行的JAR,您可以鍵入:

java -Xrunhprof:cpu=times -jar Hello.jar 

當運行完成後,你就會有一個名爲「Java中的(大)的文本文件。 hprof.txt」。

該文件將包含有趣的一堆數據,但你正在尋找的部分是開始部分:

CPU TIME (ms) BEGIN (total = 500) Wed Feb 27 16:03:18 2013 
rank self accum count trace method 
    1 8.00% 8.00% 2000 301837 sun.nio.cs.UTF_8$Encoder.encodeArrayLoop 
    2 5.40% 13.40% 2000 301863 sun.nio.cs.StreamEncoder.writeBytes 
    3 4.20% 17.60% 2000 301844 sun.nio.cs.StreamEncoder.implWrite 
    4 3.40% 21.00% 2000 301836 sun.nio.cs.UTF_8.updatePositions 

或者,如果你不這樣做的話,我會嘗試安裝VisualVM-Extensions,VisualGC,Threads Inspector以及至少Swing,JVM,Monitor和Jvmstat示蹤探針。

前往工具 - >插件來安裝它們。如果你需要更多的細節,評論,我會進一步擴展這個答案。

+0

Arg ..我不明白。我嘗試過使用你的建議,以及你鏈接的父親的一些建議,並且它所說的所有內容都是'通過對正在運行的線程進行採樣來完成CPU的使用情況。 – 2013-02-27 21:51:26

相關問題