首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法对作为Windows7上的服务运行的Tomcat7使用JVisualVM性能分析

无法对作为Windows7上的服务运行的Tomcat7使用JVisualVM性能分析
EN

Stack Overflow用户
提问于 2013-01-29 09:40:15
回答 4查看 9K关注 0票数 18

我正在尝试使用本地运行的JVisualVM (JDK1.7.0- 06,64位)将运行在Apache Tomcat (7.0.34)中的Servlet评测为Windows7 (64位)上的服务。

最初,由于不同的"java.io.tmp“属性错误/功能,我遇到了Tomcat没有显示在本地应用程序列表中的问题,但我按照这个论坛上几篇帖子中的建议解决了这个问题。

然而,尽管Tomcat进程现在在本地应用程序列表中显示为“本地应用程序”,但当我打开该进程时,没有监视器、线程、采样器或配置文件的选项卡-只有“概述”选项卡,其中的“JVM参数”和“系统属性”子选项卡显示可怕的“此jvm不支持”消息。

我已经仔细检查了以下几项:

  • 通过查看JVisualVM中的JVM属性(使用Tomcat的JMX连接)和实际的TMP/ JVisualVM目录,并确认两者的PID文件都存在
  • 文件系统是NTFS
  • 的名称中没有下划线(注意:用户确实有句点),查看JVisualVM中的系统属性(同样使用Tomcat的JMX连接),确定Tomcat和JVisualVM具有相同的"java.io.tmp“路径在我们使用形式为"firstname.lastname“的网络登录的名称中,但是,我在JVisualVM中查看其他Java应用程序没有任何问题,所以我不认为这是一个问题)
  • 通过查看任务管理器

中的进程,发现Tomcat和JVisualVM都是作为同一个Windows用户执行的

最后几点:

  • 我需要对Servlet进行性能分析,所以使用JMX是不够的,因为我能够在Windows XP计算机(Java7、Tomcat7作为服务)上进行性能分析,所以看起来像是Windows7/ 64位的东西?

如果任何人有并解决了这个问题,显然,解决方案将非常感谢。然而,了解其他人是否正在运行相同的配置-Windows764位、Java764位、Tomcat7作为服务运行- successfully.会很有用

Tomcat:不是作为服务运行,而是使用批处理文件运行,一切都运行得很好:作为服务运行是什么意思?

EN

回答 4

Stack Overflow用户

发布于 2014-01-28 00:46:46

正如我在之前的评论中所暗示的那样。我想简单的答案是,这是不可能的,。为了实现jconsole/jvisualvm与被监控进程之间的通信,Java使用了内存映射文件。最后,它归结为某个Windows API调用由于Windows Vista中添加的"Windows Service Hardening“1功能而失败,当然,该功能也存在于Windows 7和更高版本中。

失败的调用是对函数OpenFileMapping的调用,如perfMemory_windows.cpp行1402所示。在我的实验中,该方法是使用"hsperfdata_username_process id“形式的参数调用的。正如Microsoft对服务强化引入的差异的进一步详细解释(请参阅3),如果不使用名称前缀,通信将无法工作:“如果用户应用程序...通过创建或打开带有Local\前缀(或无前缀,默认为Local)的对象来与服务同步,则应用程序不再按预期工作。”

如果有人想亲自看看的话。您可以使用Windows调试工具附带的记录器工具4来跟踪API调用。

此外,Sysinternals进程浏览器非常方便,因为它通过其“查找句柄或DLL...”显示用于内存映射文件的全名。函数。只需搜索包含"hsperf“的句柄。

作为附注:删除或以其他方式处理包含hsperf数据的临时目录的变通方法归结为要监视的进程和监视进程所使用的用户名的大小写需要一致的事实。但是,除了更改临时目录之外,还可以轻松地更改监视进程使用的USERNAME环境变量。您还可以在perfMemory_windows.cpp的272行中看到它是如何被使用的。

1

2

3

4

票数 10
EN

Stack Overflow用户

发布于 2013-02-18 19:53:23

您几乎做到了“我使用批处理文件运行Tomcat,而不是将其作为服务运行,一切都运行得很好:作为服务运行是什么?”现在剩下的唯一步骤就是将JVisualVM作为服务运行:)

请参考以下内容

https://blogs.oracle.com/nbprofiler/entry/monitoring_java_processes_running_as

由于只能评测在与VisualVM相同的用户下运行的Java进程,因此评测Windows服务(缺省情况下在System帐户下运行)的唯一方法是将VisualVM本身作为一项Windows服务启动。请注意,由于默认情况下阻止服务显示任何UI的安全限制,此方法在Windows Vista上不起作用。

另一种选择是运行来作为本地系统运行CMD.EXE,请参阅下面的内容。

http://vicevoice.blogspot.in/2009/09/vaas-visualvm-as-service.html

票数 7
EN

Stack Overflow用户

发布于 2014-01-28 06:31:59

您不能直接通过网络连接吗,即用以下命令启动JVM

代码语言:javascript
复制
 java 
  -Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=1234 
  -Dcom.sun.management.jmxremote.local.only=false 
  -Dcom.sun.management.jmxremote.authenticate=false 
  -Dcom.sun.management.jmxremote.ssl=false 
  -jar my.jar`

并在工具中创建到localhost:1234的网络连接

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14574308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档