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

2022-09-03 15:16:19

正如我在运行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甚至没有被太多使用。而且系统真的很慢!


答案 1

作为第一步,我建议确定究竟什么是慢的。它是否执行某些作业的速度很慢?还是演示了处理来自不同客户端的作业的低吞吐量?

什么资源不足?

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

当您确定哪个资源不足以及程序中受其影响的部分时,您可以尝试找到要优化的代码段。使用随机工具并通过它运行应用程序而不知道要查找的内容是没有意义的。

根据我个人的经验,当您只有一种缓慢的方法时,这是非常罕见的情况,可以使用分析器找到该方法。最有可能的是算法中的某个地方出现意外的 IO 和/或同步或数据库架构错误。


答案 2

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

你可以试试JProfiler,这是一个不错的分析器(但付费)

您可以尝试 Netbeans 分析器,它是免费的,而且效果很好

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


推荐