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