我有一个在远程计算机上运行的Java进程,该进程设置了一些mbeans.我也在jstatd
该机器上以与Java进程相同的用户身份运行.(可以通过编程或使用-Dcom.sun.management.jmxremote...
等方式设置mbeans ,这似乎没有区别).
VisualVM能够jstatd
连接到它自动发现的进程,但这意味着我无法访问mbeans,例如CPU历史记录图表.或者我可以创建一个显式的JMX连接,它给了我通常的有用工具,但是我希望应用程序在启动时被分配一个随机的JMX端口,这个配置不能是静态的.
有没有办法让VisualVM通过JMX自动连接到我的进程?这需要它自动发现JMX端口,但我原以为jstatd
可以做到这一点.有没有人知道visualvm的任何插件自动化这个?
VisualVM中"Monitor-> Classes"下标有"Total loaded"的图表是什么意思?
我问的原因是因为在特定的测试用例下,"Total loaded"图表呈线性增长,但内存(heap&permgen)保持稳定.
经过大约10分钟的压力测试,VisualVM报告超过600,000个"已加载"类.并且只有450个"卸载".该应用程序此时仍在响应.
这究竟意味着什么?它是否仍然计算GC运行期间清除的所有类?它们是不同的类或不同的类实例吗?
我在Jetty上运行了一个wicket + spring + hibernate应用程序.当我使用VisualVM(jdk 1.7.0_9)启动CPU分析时,它首先使用控制台打印停顿几分钟:
Profiler Agent: 250 classes cached.
Profiler Agent: 250 classes cached.
Run Code Online (Sandbox Code Playgroud)
这些行重复约20次,然后VisualVM说它已经开始实验并且检测了大约8000种方法.
在此之后,我单击我的Web应用程序上的一个按钮,然后应用程序完全挂起几分钟,同时控制台打印出以下行:
Profiler Agent: Redefining 100 classes at idx 100, out of total 336
Run Code Online (Sandbox Code Playgroud)
在此之后,我获得了分析结果,但它们相当无用,因为几乎99.6%的时间花费了
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()
Run Code Online (Sandbox Code Playgroud)
这使得VisualVM完全不可用.有人猜到这可能是罪魁祸首吗?
我正在运行Jetty 8.1.2.v20120308
我有一些JMX Beans在我的应用程序中公开性能信息.我想有一些工具可以在图形中绘制MBean的属性以进行监控(Windows Perf Mon).我喜欢JConsole和VisualVM附带的东西,但我找不到一个好的插件,它可以让我在MBean上选择一个属性并对其进行监控.有人有主意吗?
有多种工具可用于CPU和内存分析,jvisualvm在这些中是相当新的.
这些工具之间是否有任何比较/基准?哪个工具比其他工具好?
我看到一些似乎使用VisualVM的商用Java分析器,但我在Eclipse Marketplace中看不到任何免费/开源许可证.最好的选择是直接将VisualVM直接访问到Eclipse中.下一个最佳选择是允许我在Eclipse项目上配置和启动VisualVM的插件.最糟糕的选择是一个替代的分析器,它与VisualVM的功能类似.
我可能会遗漏一些东西,但是如果我想要一个Java分析器,最好是使用VisualVM,可以集成到Eclipse中,我是否有任何免费和/或开源选项?
我试图在应用程序中调试permgen错误.我正在运行VisualVM来分析应用程序,并采取了内存快照的堆转换.
将快照加载到VisualVM中进行分析,我现在可以在类列表中看到几个出现多次的类,都列出了0个实例,0个大小 - 我只期望每个类中的一个(可能链接到它的类加载器) - 是否存在有什么方法可以确定什么仍然保持对没有实例的这些类的引用?很高兴使用另一个工具,如果我可以加载转储(.hprof)来分析持有引用的内容.
谢谢!
我在我的远程计算机中使用以下命令启动了我的OSGi应用程序:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=8080 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-jar bin/felix.jar
Run Code Online (Sandbox Code Playgroud)
在我的本地机器上,我有VisualVM,我尝试连接到远程JVM实例:
我错过了什么?
谢谢!
题
为什么VisualVM在尝试查看对象分配堆栈跟踪时终止我的程序,我该如何解决?
我正在清理一个有一些内存问题的应用程序,最大的是创建一堆短命的int[]
导致GC像疯了似的一样:
当我右键单击int[]
并选择Take Snapshot and Show Allocation Stack Traces时,我的应用程序将关闭,并弹出一个警告框,说明无法获取结果快照.申请终止:
我在这个主题上发现的最接近的是一个错误报告,建议运行我的profiled应用程序-Xnoclassgc
.它不起作用,结果是一样的.
眼镜
VisualVM: 1.8.0_60 (Build 1380-140910); platform 20140910-unknown-revn
Java: 1.8.0_60; Java HotSpot(TM) 64-Bit Server VM (25.60-b23, mixed mode)
Eclipse: Luna Release (4.4.0) Build id: 20140612-0600
System: Windows 7 (6.1) Service Pack 1, amd64 64bit
Run Code Online (Sandbox Code Playgroud)
崩溃日志
崩溃日志的大小超出了字符数限制,因此我不得不将其放在其他位置.抱歉.