我们在其中一台应用程序服务器上发现了一个有趣的(尽管相当严重)问题:在某个时间点,运行 Web 应用程序的 JVM 的 CPU 使用率开始上升,并持续上升,直到应用程序最终减慢到爬行。修复此问题的唯一方法是重新启动应用程序服务器软件。
- 应用服务器:Spring tc Server(由于服务器托管在其他地方,我目前不知道确切的版本)
- 应用程序:相对标准的 Spring 3 Web 应用程序(不过我们确实使用了 JVM 内的 EHCache)
这让我想到一个简单的问题;我们可以采取什么措施来解决这个问题?
我考虑过使用 VisualVM(或其他一些 JVM 监控工具),但在这种特殊情况下,他们能做的最好的事情就是给我一个线程转储,这仍然不会告诉我是什么占用了所有 CPU 时间(除非我缺少一些东西)。
你需要找出它在做什么?此问题的一个常见原因是可用内存不足。如果这不是原因,则需要 CPU 分析器。 VisualVM 随 JDK 免费提供,并且可以为您完成这两件事。
只是你不能一直分析应用程序
发生这种情况时,您可以通过调用进行临时分析jstack
间隔几秒多次。您可以使用diff
堆栈跟踪可帮助您找到可能繁忙并消耗 CPU 的线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)