我的服务器应用程序存在性能问题(Hi-CPU)。但是这个问题只有在服务器运行很长时间(平均一周)时才会出现。我尝试使用 Netbeans 内置分析器来诊断问题,但运行几个小时后它只是停止响应。
有没有办法对应用程序进行长期监控?谢谢。
更新:这不是一个网络应用程序
我的服务器应用程序存在性能问题(Hi-CPU)。但是这个问题只有在服务器运行很长时间(平均一周)时才会出现。我尝试使用 Netbeans 内置分析器来诊断问题,但运行几个小时后它只是停止响应。
有没有办法对应用程序进行长期监控?谢谢。
更新:这不是一个网络应用程序
如果您还没有这样做(如果您使用的是 JDK 6 update 7 或更高版本),您应该看看Visual VM 。我敢肯定它会很令人欣慰,因为它是 Netbeans 分析器对 Java 核心的“改编”。
我过去曾使用 perf4j 进行性能记录以查找瓶颈
我编写了一个性能记录器工具,它可以对 cpu、内存和线程计数等指标进行采样,并使用 log4j 记录它们。通过将性能日志与您的应用程序日志进行比较,您可以轻松检测性能模式并分析您的应用程序。享受!
我对那里的分析工具了解不多,所以我不会推荐分析工具。
相反,我要做的是使用AspectJ将日志记录 ( Log4j ) 语句注入我的代码。如果您知道您知道要监控的某些区域,那么只需在这些特定切入点处注入日志记录。否则,如果您想查看所有内容,那么您可以概括您的切入点并全部注入。
收集一周的日志,然后寻找可能“不正常”的行为。这些日志文件可能会很长,具体取决于您决定记录的内容,因此您可能需要使用一些文件解析来收集信息,例如:
将一周开始的这些数字与您的表现下降时的数字进行比较。如果您得到明显的性能影响,那么我想这些将非常明显地反映在这种性质的日志文件中。
这可能比运行开箱即用的分析工具要多一些工作,但它非常灵活,如果您以前没有使用过 AspectJ,这可能是一个很好的学习体验。
Compuware提供了一个商业产品,您可以考虑使用DynaTrace。我不为 Compuware 工作,也从未为 Compuware 工作过,但是我目前的组织目前正在考虑在我们的生产环境中使用 Dynatrace。
根据您正在运行的 Java 应用程序的类型,无论是基于桌面的还是基于服务器的,安装都将向类路径添加一个 jar(以及向您的网络添加一个网络设备)。运行应用程序会导致检测数据被发送到 Dynatrace 服务器,您可以在其中检索它,甚至在整个系统中跟踪单个用户路径和事务(无论使用何种技术)。
Dynatrace 是我希望您始终保持运行的东西,而不仅仅是在您想要诊断特定问题时。此外,Dynatrace 并不便宜——您可能看到每台服务器的成本为 5 位数,但据我所见,它似乎几乎像一个永久运行的调试器一样工作,但没有太多的性能损失(< 5%)。
我不知道您正在运行什么类型的应用程序,但我们的应用程序是基于 Java EE 的 Web 应用程序,与我们的一些后端服务器连接。
高温高压