【发布时间】:2013-01-12 12:22:59
【问题描述】:
我正在尝试使用本地运行的 JVisualVM(JDK 1.7.0 - 06、64 位)将在 Apache Tomcat (7.0.34) 中运行的 Servlet 作为 Windows 7(64 位)上的服务进行分析。
最初,由于不同的“java.io.tmp”属性错误/功能,我遇到了 Tomcat 未显示在本地应用程序列表中的问题,但按照本论坛的几篇帖子中的建议解决了这个问题。
然而,尽管 Tomcat 进程现在在本地应用程序列表中显示为“本地应用程序”,但当我打开该进程时,没有监视器、线程、采样器或配置文件的选项卡 - 只有 JVM 参数的概览选项卡和系统属性子选项卡显示可怕的“此 jvm 不支持”消息。
我已经仔细检查了以下项目:
- 通过查看 JVisualVM 中的 JVM 属性(使用 Tomcat 的 JMX 连接),Tomcat 和 JVisualVM 都在运行相同版本的 Java
- 通过查看 JVisualVM 中的系统属性(再次使用 Tomcat 的 JMX 连接)并查看实际的 TMP/TEMP 目录并确认 PID,Tomcat 和 JVisualVM 具有相同的“java.io.tmp”路径两者的文件都存在
- 文件系统是 NTFS
- Windows 用户的名称中没有下划线(注意:用户的名称中确实有句点,因为我们使用的是“firstname.lastname”形式的网络登录,但是我在查看其他 Java 时没有问题JVisualVM 中的应用程序,所以不要认为这是一个问题)
- 通过查看任务管理器中的进程,Tomcat 和 JVisualVM 都作为同一个 Windows 用户执行
最后几点:
- 我需要Profile Servlet,所以使用 JMX 是不够的
- 我能够在 Windows XP 机器上进行分析(Java 7、Tomcat 7 即服务),所以看起来是 Windows 7 / 64 位的东西?
如果有人已经解决了这个问题,显然这个解决方案将不胜感激。然而,如果其他人正在运行相同的配置 - Windows 7 64 位、Java 7 64 位、Tomcat 7 作为服务运行 - 成功,这将很有用。
更新:我没有作为服务运行,而是使用批处理文件运行 Tomcat,并且一切正常:作为服务运行有什么意义?
【问题讨论】:
-
只是让你知道你没有疯,我在其他 servlet 容器上也遇到过同样的问题。我通常启动 Sysinternals 进程资源管理器,查看“命令行”列(默认的 Win 进程资源管理器上限为 255 个字符),从命令提示符执行,然后附加 VisualVM。
-
您的 Tomcat 服务以哪个 Windows 用户身份运行?这可以使一切变得不同。尝试以与运行 Tomcat 服务的用户完全相同的用户身份运行 VisualVM。
标签: windows tomcat profiling visualvm jvisualvm