我在运行 jvisualvm 时遇到以下问题 -
机器上设置的Java相关环境变量

以下是PATH变量详细信息,没有提及路径C:\apps\Java8
Path=C:\ProgramData\Oracle\Java\javapath;
C:\windows\system32;
C:\windows;
C:\windows\System32\Wbem;
C:\windows\System32\WindowsPowerShell\v1.0\;
C:\windows\System32\OpenSSH\;
C:\Program Files\Microsoft\Web Platform Installer\;
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
C:\Program Files\Microsoft DNX\Dnvm\;
C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;
D:\apps\gradle-5.5.1-bin\bin;
D:\apps\apache-ant-1.10.5\bin;
C:\apps\Java\Java8\bin;
C:\Program Files\nodejs\;
Run Code Online (Sandbox Code Playgroud)
当我运行 jvisualvm.exe 时,出现以下错误,从该错误看来 jvisualvm 正在查找某些配置文件来定位 JDK 主路径:
在此消息中,我单击“是”按钮,然后收到以下错误,提示您正在运行 VisualVM 正在从 JRE 运行 -
我正在尝试使用大型复杂的tomcat java Web应用程序解决性能问题.目前最大的问题是,内存使用量不时出现峰值,应用程序也无法响应.我已经修复了我可以使用日志分析器和日志文件的贝叶斯分析修复的所有内容.我正在考虑在生产tomcat服务器上运行一个分析器.
温柔敏感的读者注意事项:
据我所知,有些人可能会发现将生产应用程序分析为冒犯的概念.请放心,我已经用尽了大部分其他选择.我考虑这个的原因是我没有资源在我的测试服务器上完全复制我们的生产设置,而且我无法在我的测试服务器上引起感兴趣的失败.
问题:
我正在寻找能够在tomcat上运行的java Web应用程序,或者以语言无关的方式回答这个问题的答案.
java language-agnostic profiling visualvm production-environment
我在多线程程序中做了一些工作.我在JConsole中看到我仍然有2个非守护程序线程,但我无法确切知道哪个(线程总数超过30).Visual VM不提供此类信息.
我是VisualVM的新手.
有没有办法自动启动CPU分析?我的问题是我从Eclipse开始一个运行大约的程序.20秒 当我打开选项卡并单击CPU分析时,应用程序几乎已完成处理.
我想使用jmx或jstatd通过ssh隧道(到EC2机器)使用visualvm app.我该怎么做呢?以下是已尝试(和失败)的列表:(顺便说一句:如果视觉vm不合适,如何在远程计算机上找到内存泄漏?)
我在EC2机器上设置了jstatd服务器(应用程序已在其上运行)然后我设置隧道映射本地端口3333到远程端口1099在VisualVM中我尝试使用端口3333上的jstatd进行连接...没有进程在EC2上出现了
这个链接说jstatd打开另一个端口:http: //rukuro-blog.heroku.com/2011/06/30/monitoring-remote-java-applications-with-visualvm ...所以我从本地主机隧道传输该端口远程.我重新启动了视觉vm ...仍然没有
当我尝试使用folloing命令列出从EC2运行的进程时:
jps -l -m -v rmi://localhost
Run Code Online (Sandbox Code Playgroud)
......我得到了一份流程清单
当我在家用机器上列出它时
jps -l -m -v rmi://localhost:3333
Run Code Online (Sandbox Code Playgroud)
......我没有!那么,rmi端口是不是与jstatd端口(3333)隧道连接......?
我使用以下命令在远程计算机上启动了应用程序:
java -Dcom.sun.management.jmxremote.port=3333 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false\
-cp :post/* <appName>
Run Code Online (Sandbox Code Playgroud)
...该应用程序工作,所以我隧道本地端口3333到远程3333
然后我尝试从visual vm界面设置一个jmx链接到localhost:3333:...它弹出一个错误说:
cannot connect to localhost:3333 using service:jmx:rmi:///jndi/rmi://localhost:3333/jmxrmi
Run Code Online (Sandbox Code Playgroud)
如果我需要设置删除RMI服务器的链接,我不知道该怎么做.
这有希望,但有些事情是不对的:
首先,我将jmx_remote jar添加到类路径中,并使用与上面显示的JMX情况相同的命令在远程计算机上启动应用程序.我在oracle下载链接找到了jar
我从本地端口3333到远程端口3333设置了一个ssh隧道.然后我在calsspath中使用相同的jmx_remote文件启动了visualvm.
visualvm -cp:a ~/jmx/jmxremote_optional.jar
Run Code Online (Sandbox Code Playgroud)
然后我尝试将visualvm连接到远程服务器:
service:jmx:jmxmp://localhost:3333
Run Code Online (Sandbox Code Playgroud)
现在,visual vm似乎试图无限连接.它在状态栏中显示"添加服务:jmx:jmxp:// localhost:3333"...并且一直这样做,直到我关闭远程端的应用程序,此时它会弹出一个弹出窗口,说它无法连接与服务器.
我尝试使用JMX和jstatd失败了.
我不确定SOCKS代理是否正常工作,所以这是我尝试连接的方式:
ssh -i ~/.ssh/starter.pem -v -D 9696 user@host
Run Code Online (Sandbox Code Playgroud)
为了完整起见,我在另一端启动了命令:
java -Dcom.sun.management.jmxremote\
-Dcom.sun.management.jmxremote.ssl=false\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.port=3333 <app>
Run Code Online (Sandbox Code Playgroud)
在本地端,我根据LINK到VisualVm帮助页面设置了 …
多年来一直在使用VisualVM,它让我觉得有这样一个错误,我一直没有找到解决方案 - 并且肯定会将调试工作流程改进十倍.
当您双击调用树中的类名时,我总是会收到如下错误:

真的很烦人.我喜欢这个只是打开我的编辑器到该文件(到正确的行号将是一个奖金)所以我可以快速编辑/查看代码上下文.
有谁知道如何配置VisualVM,以便它可以找到源?与Eclipse集成获得奖励积分.FWIW:只是将源路径添加到类路径不起作用,不幸的是,一盒牛奶比VisualVM有更好的文档.
我正在尝试使用VisualVM和IntelliJ来分析Java应用程序.我在IntelliJ中安装了VisualVM Launcher插件.我在IntelliJ中按下带有橙色圆圈的播放按钮,启动VisualVM并在我开始运行时打开该过程.但是,当我尝试配置CPU时,它似乎没有在我的程序中分析方法.我尝试了几个不同的程序,似乎无法让任何程序与VisualVM一起工作.这就是VisualVM的样子:
分析器似乎认为总时间是857毫秒或6.21毫秒,而实际上我的程序需要大约一分钟才能运行.它似乎捕获了"DestroyJavaVM",这不是我的程序.我正在使用VisualVM,因为它是我能找到的唯一免费的Java分析器.有什么建议?这是我的VisualVM设置:
我正在使用VisualVM来监控许多JAVA应用程序,我想安装一些这个应用程序中可用的插件.不幸的是'可用插件'选项对我自己不起作用,因为我相信我可能会被阻止由公司代理.
任何想法我可以如何以及在哪里下载离线插件,以便我可以在'VisualVM'中看到这一点.
谢谢,肖恩.
我正在尝试使用Eclipse kepler中的Visual VM调试Java应用程序.我正在执行具有主要方法的类,选择Visual VM作为启动器.我已根据http://blog.idrsolutions.com/2013/05/setting-up-visualvm-in-under-5-minutes中的说明配置了Visual VM .我收到以下错误:
An internal error occurred during: “Launching TestNew”.
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
"TestNew"是我尝试执行的主要方法的类的名称.
请帮忙.
我有一个内存转储,我从一个垂死的应用程序.它消耗了所有可用堆(-Xmx1024m).它用于com.gargoylesoftware.htmlunit.WebClient抓取网页.每分钟发出一些http请求,几天后就会死掉.正如我从转储中看到的那样,它有~1750个HtmlPage类实例,每个实例都有相关对象的音调,包括已爬网页面的完整内容.
我无法理解为什么HtmlPage不收集垃圾.我已经调查了实例引用,我没有看到任何我的代码持有对它的引用,并且VisualVM说"找不到GC根".据我所知,它应该意味着该对象符合gc的条件,但它不起作用.
应用程序作为一个简单的独立进程运行,它不使用任何Web容器或应用程序服务器.
任何提示?我还应该研究什么?
眼镜:
- htmlunit v2.7
- java版"1.6.0_13"Java(TM)SE运行时环境(版本1.6.0_13-b03)Java HotSpot(TM)服务器VM(版本11.3-b02,混合模式)
- Linux my.lan 2.6.18-128.el5#1 SMP Wed Dec 17 17:42:39 EST 2008 i686 i686 i386 GNU/Linux
UPDATE1
我试图通过YourKit Java Profiler分析转储.它向我展示了许多java.lang.ref.Finalizer具有310mb保留大小的对象.它们是为net.sourceforge.htmlunit.corejs.javascript.NativeGenerator#finalize()终结者创建的,然后NativeGenerator指向Window,然后HtmlPage指向一切.
有谁知道他们为什么留在记忆中?
注意:好奇,但VisualVM显示"待定完"为零.