Jstack和没有足够的存储空间可用于处理此命令

我正在尝试在我的java应用程序上运行jstack命令。 应用程序相当大,在jboss AS中运行占用大约4GB的内存。 操作系统是Windows Server 2003标准版。 每次我收到错误“没有足够的存储空间来处理此命令”。 有足够的RAM,16GB和磁盘空间。 那么,有什么想法吗?

我最近在Win2008r2上碰到了这个问题,并且认为我会分享我的解决方案,因为它需要一段时间来弄明白。 Rob对psexec -s的评论就是为我做的。

似乎在Vista和后来的jstack因用户上下文而无法对服务起作用。 它与记忆无关。 我怀疑这是人们在2003年通过远程桌面看到这个问题的原因,除非你在mstsc上使用/ admin或/ console开关。 从Vista开始,收紧的安全性可能就是打破它的原因。

从cmd窗口启动我的应用程序工作正常,但这无助于我调试我们的标准安装。 启用java调试端口(对于VisualVM,Eclipse或大多数Java调试器)需要重新启动应用程序,因此如果您尚未启用调试,则会丢失您可能尝试捕获的状态。 在我的用户凭据下启动服务不起作用 – 我对此感到有些惊讶。 但是psexec -s从系统上下文中运行jstack,它就像一个魅力。 哦,如果UAC打开,你需要从高架cmd提示符运行psexec。

过去,当JVM作为Windows 2003上的Windows服务运行时,我已经看到了这一点。

首先,检查这是否是TMP目录的问题 。

其次,jstack(或其他实用程序,如jconsole)将不会连接到本地进程,除非它在同一会话中运行。 如果服务作为特定用户运行,您可以通过登录到同一会话进行连接。 如果您使用的是远程桌面,则可以使用“mstsc / admin”(曾经是/ console)进行连接,并尝试再次运行jstack。 如果这不能解决问题,请务必检查以确保正确设置TMP目录。

如果服务作为LocalSystem运行,则上述过程可能无济于事。 我不知道是否有办法登录与LocalSystem相同的会话。

其他一些替代方案可能是设置进程以进行远程监视,并使用jvisualvm(来自服务器本身或其他计算机)通过端口进行连接并执行线程转储。

我们在Windows机器上运行JStack时遇到问题,即使是适度的应用程序(1GB)。 我们最终使用Netbeans进行堆栈和堆分析。 这似乎更好地解决了转储文件的解析问题。 因人而异。

给Netbeans尝试分析 – 非常好。 请注意,VisualVM是一个缩减NB分析器,随附6u7。

psexec -s jstack PID >> c:\jstack.log完全适用于同一台机器。 这是第一次花了一些时间,但我再次使用重定向到文件选项执行,它在几秒钟内完成。

这是来自底层操作系统的错误消息。 除了捕获引发的exception之外,您在代码中可以做的事情并不多。 Boo对Windows如此有限。

http://technet.microsoft.com/en-us/library/cc978735.aspx