我正在尝试在我的java应用程序上运行jstack命令.应用程序相当大,在jboss AS中运行占用大约4GB的内存.操作系统是Windows Server 2003标准版.每次我收到错误"没有足够的存储空间来处理此命令".有足够的RAM,16GB和磁盘空间.那么,有什么想法吗?
Eri*_*ill 44
我最近在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服务运行时,我已经看到了这一点.
其次,jstack(或其他实用程序,如jconsole)将不会连接到本地进程,除非它在同一会话中运行.如果服务作为特定用户运行,您可以通过登录同一会话进行连接.如果您使用的是远程桌面,则可以使用"mstsc/admin"(曾经是/ console)进行连接,并尝试再次运行jstack.如果这不能解决问题,请务必检查以确保正确设置TMP目录.
如果服务作为LocalSystem运行,则上述过程可能无济于事.我不知道是否有办法登录与LocalSystem相同的会话.
其他一些替代方案可能是设置进程以进行远程监视,并使用jvisualvm(来自服务器本身或其他计算机)通过端口进行连接并执行线程转储.
归档时间: |
|
查看次数: |
26617 次 |
最近记录: |