2009-05-25 73 views
27

我想在我的Java應用程序上運行jstack命令。應用程序是相當大的,運行在佔用大約4GB內存的jboss AS內部。 OS是Windows Server 2003標準版。每當我收到錯誤「沒有足夠的存儲可用於處理此命令」。有足夠的RAM,16GB和磁盤空間。那麼,有什麼想法?Jstack和沒有足夠的存儲空間可用來處理此命令

+3

這似乎是一個Windows錯誤消息。 – 2009-05-25 13:19:57

+0

我把它放在一個需要280 MB的Tomcat上。 – ripper234 2009-10-25 11:50:22

+0

也看了這個問題 - http://stackoverflow.com/questions/222108/getting-the-java-thread-id-and-stack-trace-of-run-away-java-thread 它doesn'由於jconsole沒有看到該應用程序,因此不起作用。 – ripper234 2009-10-25 11:52:46

回答

43

我最近就遇到了這個在Win2008r2我想我會分享我的解決方案,因爲它花了一段時間來弄清楚。 Rob's comment about psexec -s是什麼對我來說。

看來,在Vista和更高版本jstack不反對,因爲用戶上下文的服務工作。它與記憶無關。我懷疑這和人們在2003年通過遠程桌面看到這個問題的原因是一樣的,除非你在mstsc上使用/ admin或/ console開關。從Vista開始,收緊的安全性可能會破壞它。

開始從cmd窗口我的應用程序工作正常,但是這並不能幫助我調試我們的標準安裝。啓用Java調試端口(對於VisualVM,Eclipse或大多數Java調試器)需要重新啓動應用程序,因此如果您尚未啓用調試,則會失去可能嘗試捕獲的狀態。在我的用戶憑據下啓動服務不起作用 - 我對此有點驚訝。但是psexec -s從系統上下文中運行jstack,它像魅力一樣工作。哦,如果UAC處於打開狀態,則需要從提升的cmd提示符下運行psexec。

3

我們必須在Windows機器上運行JStack甚至適度的應用程序(1GB)的問題。我們最終使用Netbeans進行堆棧和堆分析。這似乎應對了轉儲文件的解析好得多。因人而異。

讓Netbeans嘗試進行性能分析 - 這非常好。請注意,VisualVM是一款簡化的NB分析器,並附帶6u7。

7

在過去,當JVM是在Windows 2003上

首先運行作爲Windows服務我已經看到了這一點,請檢查是否這是一個issue with the TMP directory

其次,除非是在同一個會話中運行jstack(或其他公用設施的JConsole一樣)將不會連接到本地的過程。如果服務以特定用戶身份運行,則可以通過登錄到同一會話進行連接。如果您使用的是遠程桌面,則可以使用「mstsc/admin」(曾經是/ console)進行連接,並嘗試再次運行jstack。肯定檢查以確保TMP目錄設置正確,如果這不能解決問題。

如果服務作爲LocalSystem運行,上述過程可能不會有太大的幫助。我不知道是否有辦法登錄到LocalSystem所在的同一個會話中。

一些其他的替代品可能是設置過程長達進行遠程監控和使用jvisualvm(從服務器本身或另一臺機器)連接到端口連接了,做一個線程轉儲。

2

psexec -s jstack PID >> c:\jstack.log完美適用於同一臺機器。這是第一次花了一些時間,但我再次執行重定向到文件選項,它在幾秒鐘內完成。

相關問題