我们有一个使用 Tomcat 7 的负载平衡服务器群。偶尔(至少每天一次)服务器的 CPU 负载会急剧上升。这似乎是服务器的正常使用情况,而不是故障,但我不知道如何确定是哪个特定站点的使用情况导致了这些 CPU 峰值。
以下是我们使用的工具:
- Javamelody,它显示长时间运行的调用,但不显示它们发生的时间。
- Zabbix 可以显示 CPU 使用率,但是不会显示导致 CPU 使用率上升的原因。
- 根据管理指令,服务器日志仅显示线程但不显示任何统计信息。
是否有某种方法可以将它们联系在一起,并找出峰值出现时正在运行的线程?
或者我们需要使用更好的工具吗?
答案1
如果 Oracle Hotspot Jdk 1.7u40+ 运行 Tomcat,则 Java Flight Recorder 和 Java Mission Control 值得一试。请记住,您必须使用 JVM 参数运行 JVM-XX:+UnlockCommercialFeatures
并提供 JMX 支持才能使用 JMC 连接到 Java 进程。
答案2
我们使用一个名为 的工具psi-probe
。它更像是查看实时数据,而不是回顾之前发生的问题。但它提供了所有不同 Web 应用程序的统计数据,包括连接、线程、流量等。作为一款免费工具,它还不错。
答案3
如果这种情况可重现或至少每天发生,请运行新Relic一天(免费套餐) 并尝试在操作系统级别捕获此信息...或将其集成到应用程序中并获取详细的统计数据。对于这样的事情来说,这是一个非常方便的工具。
编辑:
分析也是一种选择...