2012-08-09 50 views
9

我試圖使用Eclipse的VisualVM launcher。這看起來相當不錯,只是如果VisualVM來不及執行我的應用程序分析,似乎會產生一個實例。我的應用程序在分析器初始化之前完成執行;一旦啓動,就會彈出一個錯誤窗口,說:cannot open requested application。然後它顯示運行Eclipse的VM(標記爲「org.eclipse.equinox.launcher.Main」)。我怎樣才能讓它等待我的申請並進行適當的分析?VisualVM的發射誤差

回答

8

我知道那個問題。只有窮人的解決方案,我一直想出是:

  1. 在源代碼中設置一個斷點
  2. 在調試模式
  3. 啓動程序連接探查
  4. 讓程序繼續

它只是需要一點時間VisualVM的注入配置代理到您的虛擬機,我敢肯定,它僅允許遠程分析。

作爲替代,你可以使用YourKit,它可以從一開始就配置您的應用程序。通過這種方式,剖析代理是在VM啓動注入:

java -agentpath:c:\yourkit\yjpagent.dll FooClass 

我很好奇,爲什麼VisualVM的不提供這個選項,因爲它技術上是可行的。無論如何,我覺得調試技巧是在Eclipse中一個很好的解決方案,除非你也有興趣在類加載等

+0

難道你只是Thread.sleep(),而它自己的工作呢? – 2012-08-09 21:21:48

+0

@RyanAmos這也是可能的,我在調試模式結束之前完成了這個任務。我不喜歡用'Timer.sleep'將它與時間放在一起,要麼你必須等到'睡眠'消失或者連接時間過長。 – 2012-08-09 21:23:34

+0

YourKit太貴了。謝謝您的幫助! – 2012-08-10 14:07:39

11

這可能是太晚了,但我有同樣的問題,並設置斷點,然後在開始調試模式根本沒有幫助。我最終發現VisualVM將其臨時數據保存在文件夾%TMP%/ hsperfdata_ [用戶名]中,我的Windows機器上的文件夾是C:\ Users \ Jacob \ AppData \ Local \ Temp \ hsperfdata_Jacob。事實證明,該進程沒有足夠的權限來訪問該文件夾,所以我放寬了它的權限,現在它工作得很好。希望這對於有同樣問題的人有用!

3

在Windows上,以管理員身份運行Eclipse。

+0

在Windows 8上這對我很好。謝謝Andres! – 2014-06-16 04:22:58

+0

不客氣。 – Andres 2014-06-16 06:45:51

0

這是一個愚蠢的解決方案,但工程。這裏有雲:

添加一個無限循環封裝到應用程序,說:「雖然(真){} your_app」。

時機噪聲也將拉平爲你的程序運行更長的時間。