5

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

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

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

4

5 回答 5

4

如果您还没有这样做(如果您使用的是 JDK 6 update 7 或更高版本),您应该看看Visual VM 。我敢肯定它会很令人欣慰,因为它是 Netbeans 分析器对 Java 核心的“改编”。

于 2012-04-18T03:41:32.087 回答
3

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

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

于 2012-04-18T04:40:10.277 回答
1

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

性能记录器

于 2013-10-30T23:33:28.540 回答
0

我对那里的分析工具了解不多,所以我不会推荐分析工具。

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

收集一周的日志,然后寻找可能“不正常”的行为。这些日志文件可能会很长,具体取决于您决定记录的内容,因此您可能需要使用一些文件解析来收集信息,例如:

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

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

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

于 2012-04-18T03:46:38.803 回答
0

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

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

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

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

高温高压

于 2012-04-18T03:57:30.160 回答