如何使用VisualVM发现瓶颈/问题

Jos*_*eal 15 java profiler scala visualvm

正如我在运行Web应用程序5天后发布的性能下降,如何发现瓶颈?,我有一个问题,一个应用程序运行一段时间后变慢.

我让VisualVM运行并在不同时间之间创建了一个快照.现在应用程序真的很慢,但我不知道如何发现瓶颈.它们彼此之间没有太多差异,唯一增长的是Heap,它在一段时间后成功地被垃圾收集.

谁能给我一些指示?

以下是快照(应用):

[1] http://www.2shared.com/file/W4XJ6HtE/application-1314108550032.html

[2] http://www.2shared.com/fadmin/22521338/f512f97e/application-1314097232727.apps.html

谢谢!

编辑:仔细观察,我注意到CPU甚至没有被太多使用..系统真的很慢!

Che*_*tEx 6

作为第一步,我建议确定究竟什么是慢的.它慢慢执行某项工作吗?或者展示处理来自不同客户的工作的低吞吐量?

什么资源不合适?

  • 如果您正在使用某些外部服务(如数据库或RPC服务器),请始终记录其响应时间并在进行任何其他优化步骤之前进行检查.
  • 这可能是缺乏处理器能力.只看CPU使用率.
  • 这可能是缺乏记忆.使用gc日志记录来检测此类问题.关于它有一个很好的主题.
  • 这可能是缺乏硬盘速度.使用iostat并了解您的硬盘性能限制.
  • 这可能是缺乏网络吞吐量.检查网络通道使用情况
  • 此外,您可能会用尽某些特定于操作系统的限制,例如打开的文件数和/或网络套接字.检查是否正确将所有操作系统级异常报告到日志文件中.

由于您已经确定哪个资源不合适以及您的程序中有哪些资源受到影响,您可以尝试找到要优化的代码段.使用随机工具并通过它运行您的应用程序而不知道要查找什么是没有意义的.

根据我的个人经验,当你只有一个慢速方法时,这是非常罕见的情况,可以通过分析器找到.很可能是在算法或错误的数据库模式中某处出现意外的IO和/或同步.


Kic*_*obo 5

实际上,有一些比VisualVM更好的工具.

你可以尝试JProfiler,这是一个很好的探查器(但付费)

你可以试试Netbeans Profiler,这是免费的,效果很好

使用VisualVM,您只能看到应用程序的实际状态(内存和CPU使用情况,JMX,加载的类等).

  • 有更好的工具; 但这并不意味着你在这种情况下需要它们(我目前无法判断).JvisualVM还包括一个分析器(仪器和采样)和一个内存分析器.您还可以安装其他插件. (3认同)