最近一项目出现问题,用户访问时系统一直处于白屏状态无法响应。此问题之前也出现过,是由于之前同事开发的长连接耗尽系统所有线程导致,但当时发现问题已经修改,如今又再次出现此问题,只能导出线程日志进行分析,但分析过程中发现直接通过命令行方式执行JDK提供工具会给出错误提示,“存储空间不足,无法处理此命令”。
服务器环境:windows server 2008
根据该错误提示进行查询,发现网上很多软件都曾经遇到该提示,但很多给出的解决方案都是添加虚拟内存进行解决,但此种方案明显不适用于我这种问题。
在我本地开发环境通过jstack或者jps等工具执行的时候完全没有任何问题,而且之前在linux环境下通过这些工具执行也没什么问题,为什么服务器就不行了呢?
在网上发现了这么一段话
Jstack only allows you to connect to JVM's running in the same user context. Many people use a service wrapper to start their products: this puts the JVM in the Local System Account user context. Since this special account has no login shell, you won't be able to force a thread dump normally.
后来仔细一想项目确实是通过服务方式进行注册,而且之前进行问题定位的时候也是直接使用的jvisualvm 进行查看就不存在账户问题。
这种情况下通过CMD直接运行JPS命令,也只能等到当前jps的进程ID
这种情况只能继续想办法处理下去,在处理过程中发现国外网友也出现此问题,建议通过psexec进行处理,通过psexec使用system 用户进行程序执行。
网上下载该程序后使用命令后,发现JPS命令能够执行了,但是还是无法执行jstack
无奈只能接着尝试,在查看了psexec 的命令后,我想要不试试直接在当前窗口执行
最后终于成功!