java - 无法使用 jhat、jps、jstack 调试 Java Windows 服务

标签 java windows windows-services

我经常展示 jhat,jps和 jstack 工具集,供 Linux 和 Mac 上的开发人员使用。但是,开发人员最近表示,如果有问题的 Java 应用程序作为 Windows Service 运行,这些在 Windows 中将无法使用。 .

A Sun-filed bug says something very similar ,但由于不活动而关闭。

我已经亲自测试过了,这看起来确实是真的,尽管我简直不敢相信。这是设置:

  1. Tomcat 或类似的作为 Windows 服务运行,“登录为”==“本地系统”
  2. 具有管理员权限的用户登录到同一台 Windows 计算机。
  3. Admin 打开 Windows 任务管理器,可以看到 java.exe 正在运行
  4. 管理员打开控制台,输入“jps”,返回一个不包括 Tomcat 的 java 服务进程的进程列表。
  5. 作为一种蛮力尝试,从 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/

相关文章:

java - 无法连接到java中的Access数据库文件

java - 我可以签署 Java 类文件吗

python - Pip 安装 Scrappy - "python setup.py egg_info"失败,错误代码为 1

vb.net - Windows 服务启动失败

c# - 如何从打开的流中检测文件重命名

java - 如何使用 JPA 2 二级缓存的另一个实现?

java - 可执行 JAR 文件还包含源代码

Python检索Windows服务信息

c++ - Windows,打开原始磁盘

asp.net - 如何使用配置设置在服务器启动时自动启动 WCF Windows 服务