是否有长期的 Java 分析器或性能记录器



我的服务器应用程序中有一个性能问题(Hi-CPU)。但仅当服务器运行了很长时间(平均一周)时,问题才会出现。我尝试使用 Netbeans 内置探查器来诊断问题,但在运行几个小时后,它只是停止响应。

有没有办法对应用程序进行长期监控?谢谢。

更新:这不是一个网络应用程序

如果您还没有查看 Visual VM(如果您使用的是 JDK 6 update 7 或更高版本),则应查看 Visual VM。我相信它会非常令人欣慰,因为它将Netbeans分析器"改编"到Java核心中。

我过去曾使用 perf4j 进行性能日志记录以查找瓶颈

http://www.infoq.com/articles/perf4j

我编写了一个性能记录器工具,该工具对 CPU、内存和线程计数等指标进行采样,并使用 log4j 记录它们。通过将性能日志与应用程序日志进行比较,您可以轻松检测性能模式并分析应用程序。享受!

性能记录

我对分析工具了解不多,所以我不打算推荐分析工具。

相反,我要做的是使用 AspectJ 将日志记录 (Log4j) 语句注入到我的代码中。如果您知道要监视的某些区域,则只需在这些特定切入点注入日志记录即可。否则,如果你想看所有东西,那么你可以概括你的切入点并注入全部。

收集一周的日志,然后查找可能表现"异常"的内容。这些日志文件可能会很长,具体取决于您决定记录的内容,因此您可能需要使用一些文件解析来收集以下信息:

  • # 每个方法的调用次数
  • 某些方法调用之间的时间
  • 我相信您可以在了解应用程序细节的基础上想到其他人

将本周初的数字与表现下降时的数字进行比较。如果您获得了明显的性能影响,那么我想这些将非常明显地反映在这种性质的日志文件中。

这可能比运行开箱即用的分析工具要多一些工作,但非常灵活,如果您以前没有使用 AspectJ 做过太多事情,这可能是一个很好的学习体验。

有一个商业产品,你可以考虑来自Compuware的DynaTrace。我不为 Compuware 工作,也从未为 Compuware 工作过,但我目前的组织目前正在考虑在我们的生产环境中使用 Dynatrace。

根据您运行的 Java 应用程序的类型,无论是基于桌面还是基于服务器的安装都将向类路径添加 jar(以及将网络设备添加到您的网络)。运行应用程序会导致检测数据发送到 Dynatrace 服务器,您可以在其中检索数据,甚至可以跟踪整个系统中的单个用户路径和事务(无论使用何种技术)。

Dynatrace 是我设想您始终运行的东西,而不仅仅是在您想要诊断特定问题时。此外,Dynatrace 并不便宜 - 您可能看到每台服务器的成本为 5 位数,但从我所看到的情况来看,它似乎几乎像一个永久运行的调试器一样工作,但没有太多的性能损失 (<5%)。

我不知道您运行的确切应用程序类型是什么,但我们是基于Java EE的Web应用程序,与我们的一些后端服务器接口。

最新更新