草庐IT

Visualvm

全部标签

java - 为什么 Java 垃圾收集器似乎在执行较不积极的运行后不久就进行了积极的运行?

在使用VisualVM监视Java程序时,我注意到垃圾收集器行为中的一个有趣模式。似乎很多时候,在执行“正常”垃圾收集运行之后,GC会执行第二次更密集的cpu运行,这似乎没有额外的效果(更积极的运行后使用的堆与它是在打火机运行之后)。我已经在VisualVM的输出中指出,您可以在其中看到垃圾收集器的运行和相应的堆使用变化。我的问题基本上是垃圾收集器在这里做什么以及为什么?是什么导致它在有大量可用内存时尝试这些真正的cpu密集型运行,并且与较轻的运行相比没有明显的好处?还是我误解了图表?程序的性能并没有真正受到影响,我只是好奇。 最佳答案

Java VisualVM CPU 使用率和处理器亲和性

根据我今天的经验,我发现Oracle的JavaVisualVM将cpu使用率显示为总机器内核的百分比,即使被监视的JVM在操作系统中设置了有限的进程亲缘关系也是如此。这是在“监视器”选项卡中。使用taskset(在linux、Ubuntu上)限制受监控的jvm,当允许该jvm的处理器在htop中接近100%利用率时,cpu百分比显示在VisualVM显然等于cpu总数除以被监控的jvm允许的处理器数。因此,秤的分辨率对于这种情况是不够的。您能否确认您在其他操作系统或一般情况下观察到相同情况?有没有办法让VisualVM在显示CPU使用率时只考虑关联分配的核心?

java - 生产中的 VisualVM?

我考虑运行VisualVM与生产JVM对比,看看那里发生了什么——由于某种原因,它开始消耗过多的CPU。它不能导致JVM故障,所以我正在尝试估计所有风险。我在他们的site上看到的唯一问题这可能会降低JVM与类共享和-XshareJVM选项有关,但afaik类共享在服务器模式和/或x64系统上未启用。那么针对生产JVM运行VisualVM真的安全吗?如果不是——应该考虑哪些风险,以及针对JVM运行VisualVM(并使用它进行分析)有多少负载(CPU/内存)戴上了吗?谢谢 最佳答案 AFAIKVisualVM可以在生产中使用,但我只

java - 为什么这种方法成为热点?

我正在编写一个(简单!)线性代数库。在执行matrixmultiplication,一个VisualVM性能示例告诉我,在乘以大型矩阵(5kx120k)时,该算法在以下方法中花费了85%的时间(特别是“self时间”):publicdoublenext(){doubleresult;if(hasNext())result=vis[i++].next();elsethrownewIllegalStateException("Nonextvalue");returnresult;}无需赘述(抱歉,我无法分享更多代码),此方法是矩阵“迭代器”的next()方法。(您可以将此方法所在的类想象成

java - VisualVM 不显示调用 CPU 性能分析的任何方法

我正在运行Java1.6_21SDK构建应用程序。它是在Eclipse中构建的,我正在使用VistualVMeclipse插件在应用程序启动时启动VisualVM。当我转到Profile选项卡并单击CPUprofiling时,它只显示正在运行的THREADS,但不显示任何METHOD调用。从字面上看,没有。我用谷歌搜索了一大堆东西,但似乎没有什么合适的。有没有人看到这个问题?有解决办法吗??环境:WindowsXP32位“经典”EclipseSDK3.7.0来自SDK1.6_21的VisualVM这对我来说没有任何意义。可以获取到内存堆信息,但是成员调用信息为零。非常感谢任何帮助。

java - 为什么 VisualVM 探查器中没有显示所有方法?

我正在使用VisualVM查看我的应用程序哪里慢了。但是它并没有显示所有的方法,很可能没有显示所有延迟应用程序的方法。我有一个实时应用程序(声音处理)并且有几百微秒的时间不足。有没有可能VisualVM隐藏了本身很快的方法?更新1我通过采样器和猜测找到了慢速方法。这是从关闭的调试日志中调用的toString()方法,但耗时。Settings有所帮助,现在我知道如何查看它了:它取决于Startprofilingfrom选项。 最佳答案 除了RyanStewart提到的过滤器之外,还有一些方法可能不会出现在分析器中的其他原因:采样配置文

Java 8 mdmp 转储文件分析器与 visualvm 添加 VM 核心转储变灰/空白

我找到了Toolforanalyzingjavacoredump,这真的很接近,但是当我打开jvisualvm并打开"file"菜单时,“添加VMCoredump”选项不可用。当我运行溢出文章中列出的其他选项时,我没有得到线程转储。我正在更深入地研究jmap命令,但我想知道如何使用添加VMCoredump功能,因为它会让生活更轻松。 最佳答案 您必须在Solaris或Linux上才能访问VisualVMCoredumps选项。在文档(http://visualvm.java.net/coredumps.html)中它说:TheCor

java - visualvm 对比 JProbe 对比 JProfiler

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。有多种工具可用于CPU和内存分析,其中jvisualvm是相当新的。这些工具之间是否有任何比较/基准?哪个工具比其他工具更好?

java - 在 VisualVM 中向下钻取

我刚刚安装了Java1.6_07,所以我可以尝试使用VisualVM进行分析。它告诉我,我的应用程序60%的时间花费在sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run我如何知道它在那段时间在做什么?它有多少时间是在等待调用它,或者做其他事情?它在叫什么,它在叫什么?我似乎无法找到任何方法来深入到更深层次,就像在Quantify或Perl分析器中那样。 最佳答案 我没有使用VisualVM的经验——但是JRockit的分析器确实提供了这些信息;您可以考虑改用它。更新:可以

java - JVM内存使用失控

我有一个Tomcat网络应用程序,它代表客户执行一些内存和CPU密集型任务。这是正常的并且是所需的功能。但是,当我运行Tomcat时,内存使用量会随着时间的推移而飙升至4.0GB以上,此时我通常会终止该进程,因为它会干扰我开发机器上运行的所有其他内容:我以为我的代码无意中引入了内存泄漏,但在使用VisualVM检查它之后,我看到了一个不同的故事:VisualVM显示堆占用了大约1GB的RAM,这是我用CATALINA_OPTS="-Xms256m-Xmx1024"设置的。为什么我的系统将此进程视为占用大量内存,而根据VisualVM,它几乎不占用任何内存?经过一些进一步的探索,我注意到