我正在尝试使用本地运行的 JVisualVM(JDK 1.7.0 - 06、64 位)将在 Apache Tomcat(7.0.34)中运行的 Servlet 作为 Windows 7(64 位)上的服务进行分析。
最初,由于不同的“java.io.tmp”属性错误/功能,我遇到了 Tomcat 未显示在本地应用程序列表中的问题,但按照本论坛中几篇文章的建议解决了这个问题。
然而,尽管 Tomcat 进程现在在本地应用程序列表中显示为“本地应用程序”,但当我打开进程时,没有监视器、线程、采样器或配置文件的选项卡 - 只有 JVM 参数和系统属性子的概览选项卡-tabs 显示可怕的“此 jvm 不支持”消息。
我已经仔细检查了以下项目:
- 通过查看 JVisualVM 中的 JVM 属性(使用 Tomcat 的 JMX 连接),Tomcat 和 JVisualVM 都在运行相同版本的 Java
- 通过查看 JVisualVM 中的系统属性(再次使用 Tomcat 的 JMX 连接)并查看实际的 TMP/TEMP 目录并确认两者的 PID 文件,Tomcat 和 JVisualVM 都具有相同的“java.io.tmp”路径存在
- 文件系统是 NTFS
- Windows 用户的名称中没有下划线(注意:用户的名称中确实有句点,因为我们使用的是“firstname.lastname”形式的网络登录,但是我在 JVisualVM 中查看其他 Java 应用程序没有问题所以不要认为这是一个问题)
- 通过查看任务管理器中的进程,Tomcat 和 JVisualVM 都作为同一个 Windows 用户执行
最后几点:
- 我需要分析Servlet,因此使用 JMX 是不够的
- 我能够在 Windows XP 机器(Java 7、Tomcat 7 即服务)上进行分析,所以这似乎是 Windows 7 / 64 位的东西?
如果有人已经解决了这个问题,显然这个解决方案将不胜感激。但是,如果其他人正在运行相同的配置(Windows 7 64 位、Java 7 64 位、Tomcat 7 作为服务运行),这将很有用。
更新:我没有作为服务运行,而是使用批处理文件运行 Tomcat,并且一切正常:作为服务运行有什么意义?