我经常展示 jhat,jps和 jstack 工具集,供 Linux 和 Mac 上的开发人员使用。但是,开发人员最近表示,如果有问题的 Java 应用程序作为 Windows Service 运行,这些在 Windows 中将无法使用。 .
A Sun-filed bug says something very similar ,但由于不活动而关闭。
我已经亲自测试过了,这看起来确实是真的,尽管我简直不敢相信。这是设置:
- Tomcat 或类似的作为 Windows 服务运行,“登录为”==“本地系统”
- 具有管理员权限的用户登录到同一台 Windows 计算机。
- Admin 打开 Windows 任务管理器,可以看到 java.exe 正在运行
- 管理员打开控制台,输入“jps”,返回一个不包括 Tomcat 的 java 服务进程的进程列表。
- 作为一种蛮力尝试,从 Windows 任务管理器中获取 tomcat 的 PID 作为一项服务。键入 jstack < pid >。得到回复:
没有这个进程
这似乎可以在 Windows XP、Windows 2003 Server 和 Windows 7 下重现。Java 版本 1.5 和 1.6 产生相同的结果。
有没有办法从终端“sudo up”以获取 JPS 和其他工具来查看 java 服务,即使以管理员身份登录也是如此?
最佳答案
要运行实用程序,您可以使用登录帐户使用“mstsc/admin”连接到控制台 session (不确定它需要具有的确切权限,我的权限在管理员组中)并使用 Sysinternals psexec 工具作为系统运行。下面是一个使用 jstack.exe 的例子:
psexec -s "%JAVA_HOME%\bin\jstack.exe" PID >stack.txt
其中 PID 是您进程的进程 ID。您可能还必须根据您的特定环境替换 JDK 的实际路径。
另外,TEMP directory must be set correctly否则这些工具将再次不起作用。
关于java - 无法使用 jhat、jps、jstack 调试 Java Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197912/