2011-09-09 32 views
0

我正在VMWare Fusion 3.x(OSX)內部運行的Windows 7 x64上進行一些Java開發。我已經安裝了JDK6(更新26),將JAVA_HOME設置爲路徑(沒有結尾斜槓),然後重新啓動我的命令提示符。在VMWare下需要幫助在Windows上運行visualvm

我可以成功啓動該程序。在啓動時運行的校準,然後失敗,出現此錯誤:

「無法創建目錄\ VMWare的主機\共享文件夾\ .nbprofiler」(即斜線後沒有空間,但標記的藏身之期)

我可以點擊繼續,但是當我在程序中時,我無法執行CPU或內存分析。我拋出了一個類似的錯誤對話框:

「爲目標JVM錯誤檢索保存的校準數據:無法創建...(同更早)」

曾幾何時我通過傳遞過這樣的工作 - -userdir標誌和-J-Dnbprofiler.home,但該技巧不再適用。

(完整的命令是: jvisualvm --userdir C:\用戶\ MYNAME -J-Dnbprofiler.home = C:\用戶\ MYNAME )

如何可以強制jvisualvm保存其校準數據在一個「真正的」驅動器,而不是vmware網絡驅動器,並得到這個工作?

回答

3

.nbprofiler目錄源自user.home系統屬性。我不確定你對Windows安裝做了什麼,但是你的user.home指向directory\VMWare-host\Shared Folders。因此,一種解決方案是修復Windows安裝,以便Java將c:\Users\myname識別爲您的用戶主目錄。如果由於某種原因失敗,您可以使用nbprofiler.home屬性覆蓋它,正如您正確寫入。但是你應該把它指向不存在的目錄,所以你應該用下面的命令行啓動VisualVM的:

jvisualvm -J-Dnbprofiler.home=c:\Users\myname\nbprofiler --userdir c:\Users\myname\visualvm_userdir 

最後一個音符,即使探查部分不工作,你應該能夠在使用採樣「採樣器「選項卡。

+0

優秀,工作!順便說一句,安裝Windows時我沒有做任何特別的事情,所以我不知道user.home如何以及爲什麼沒有指向正確的位置。我**認爲**這是VMWare正在做的一些幕後操作。 – cremes

+1

Java使用Windows註冊表和shell32.dll API來獲取用戶主目錄。事實上,它尋找Desktop文件夾,並使用父目錄作爲主目錄。你的「桌面」文件夾在哪裏? –

+0

那會是那個問題。 Java沒有考慮Windows文件夾重定向功能。 VMWare使您能夠通過「文件夾重定向」功能同步重要的用戶文件夾,這意味着所有內容都映射到主機系統以獲取這些關鍵文件夾。所以桌面被映射到上述文件夾作爲子文件夾,因此它的父母是錯誤的。 感謝Tomas,這解決了另一個問題,當時我正在使用當前正在處理的大量Java應用程序,這些應用程序在啓用文件夾重定向時也同樣感到困惑。 –

0

嘗試禁用VM共享。

它適用於Windows 7 x86中Fusion with Sharing禁用(並且共享是提供無法寫入的文件夾的機制)。

+0

不可行。虛擬機映像的磁盤空間非常少,因此它需要共享驅動器才能訪問我正在運行的代碼,程序的數據等。 – cremes

+0

然後我建議你看看VisualVM的源代碼,找出它認爲共享驅動器可用的原因。 –

0

我發現以下命令適用於我。

visualvm -J-Duser.home=%HOME%

而且,我需要添加-Duser.home =%HOME%到我的應用程序的啓動命令。

我已經定義nbprofile.home和用戶目錄,但我仍然得到當探查是對我的應用程序運行錯誤:探查代理程序錯誤:無法創建目錄\ VMware的主機\共享Folders.nbprofiler

我發現Profiler使用的是由我的應用程序定義的user.home,而不是使用visualvm定義的。兩者似乎都是需要的。