如何使用JVisualVM进行性能分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JVisualVM进行性能分析相关的知识,希望对你有一定的参考价值。
参考技术A 1) 静态代码分析 :主要通过一些既有的代码编写规则,来分析目前代码是否存在一些安全漏洞或待优化的问题,可以通过自己的实际情况来对检查规则做相应的调整。(2) 任务管理器 :快捷键:Ctrl+Shift+Esc ,我们通过使用Processes 和Performance 标签来从整体上进行判断,主要是通过观察我们软件的进程在执行过程中发生的CPU、内存、硬盘读写等指标的变化,因为其不具有日志记录功能,需要实时性地观察和多次尝试,目的就是在大方向上判断是否存在性能问题。(3) 性能监视器 :Start -> Run -> Perfmon ,或从系统管理工具中打开,通过这个工具我们可以定制观察很多的详细参数变化情况,且界面是通过一个监视器来不断刷新数据,相对任务管理器的实时性而言,该工具会记录一段时间内的变化,有助于我们总结和观察参数的变化,并最终确定性能问题的根由。(4) 探查事件 :在VS中集成有事件探查功能,VS2008中的位置为“分析 -> 启动性能向导 ”,我们可以选择不修改程序二进制代码的“采样 ”方式,也可以选择会修改二进制文件的“插装 ”方式,前者通过对CPU计数器的采样,来获取相应的计数器数据,而后者通过添加一些必要的处理函数来更加精确地观察函数的执行情况,可斟酌选择。我们会得到大量的分析数据,注意进行再次筛选。(5) 代码覆盖 :主要是通过结合测试来达到对代码的检查范围,不一定代码覆盖率越高越好,关键是要根据自己的情况来制定合适的覆盖目标为宜。(6) 命令行工具集成 :我们同样可以通过命令行工具执行一些第三方的测试工具,如VSInstr 、VsPerfMon 、VSPerfCmd 和VsPerfReport 工具等。 参考技术B 1、本地机器的程序直接可以监听到2、远程机器的程序需要加上JVM参数
-Dcom.sun.management.jmxremote= true
-Dcom.sun.management.jmxremote.port= 9090
-Dcom.sun.management.jmxremote.ssl= false
-Dcom.sun.management.jmxremote.authenticate= false
JVisualVM 如何启动和停止 CPU 分析?
【中文标题】JVisualVM 如何启动和停止 CPU 分析?【英文标题】:How does JVisualVM start and stop CPU profiling? 【发布时间】:2015-09-18 18:25:10 【问题描述】:我想在我的应用程序中添加一个选项,最终用户可以启动 CPU 分析、重现性能问题、停止 CPU 分析,然后将分析信息作为电子邮件附件发送给我们的支持团队。我希望我可以使用 JVisualVM 用来停止和启动分析并返回结果的相同机制。
有人知道 JVisualVM 是如何做到这一点的吗?它不需要在命令行上设置 -agentlib:hprof 选项 - 它使用 hprof 还是其他机制?
【问题讨论】:
【参考方案1】:JVisualVM 通过使用 JMX 命令动态添加代理来检测代码。这实现起来并不简单。您可能会发现 JVisualVM 有一个 API,如果是这样,我会使用它而不是尝试自己实现它。如果它没有公共 API 并且我怀疑它没有,我建议尝试一些更简单的方法。
【讨论】:
感谢您的回答 - 我希望只调用 JVisualVM 调用的任何方法来检测代码并开始分析,这样我就不必自己实现它(只需将 JVisualVM jar 包含在我的应用程序类路径)。我可以从 CPU 采样开始,它只使用与进程的 JMX 连接并调用 ThreadMXBean.dumpAllThreads() 来收集数据。如果这还不够准确,我可能会进一步调查完整的分析。再次感谢。【参考方案2】:该工具使用动态检测。
当按下 Profiler 选项卡中的 CPU 按钮时,分析器会附加到应用程序并开始分析其性能。一开始分析器需要检测应用程序的一些方法,实际检测方法的数量显示在状态区域中。由于分析器使用动态检测,检测方法的数量可能会在分析会话期间发生变化。附加分析器并开始收集数据后...
https://blogs.oracle.com/nbprofiler/entry/profiling_with_visualvm_part_1
【讨论】:
以上是关于如何使用JVisualVM进行性能分析的主要内容,如果未能解决你的问题,请参考以下文章