java - JVM CPU 峰值故障排除

标签 java jvm cpu-usage tcserver

我们发现我们的一个应用程序服务器存在一个有趣的(尽管相当严重)问题:在某个时间点,运行我们的 Web 应用程序的 JVM 的 CPU 使用率开始上升并持续上升,直到应用程序最终变慢爬行。修复它的唯一方法是重新启动应用程序服务器软件。

  • 应用服务器:Spring tc Server(由于服务器托管在别处,目前不知 Prop 体版本)
  • 应用程序:相对标准的 Spring 3 Web 应用程序(不过我们确实使用了 JVM 内的 EHCache)

这让我想到了一个简单的问题;我们可以做些什么来解决这个问题?

我考虑过使用 VisualVM(或其他一些 JVM 监控工具),但他们能做的最好的事情 - 在这种特殊情况下 - 是给我一个线程转储,它仍然不会告诉我是什么占用了所有 CPU 时间(除非我遗漏了什么)。

最佳答案

您需要了解它在做什么?此问题的一个常见原因是可用内存不足。如果这不是原因,则需要 CPU 分析器。 VisualVM 随 JDK 免费提供,并且可以为您完成这两件事。

only you can't profile the application all the time

发生这种情况时,您可以每隔几秒多次调用 jstack 来进行临时分析。您可以使用堆栈跟踪的 diff 来帮助您找到可能繁忙和消耗 CPU 的线程。

关于java - JVM CPU 峰值故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14602451/

相关文章:

java - 如何在 Java 中解析带有 "Opening and ending tag mismatch"的 XML 文件

java - 从 ColorPickerDialog.java 中检索颜色信息

java - 如何在夏令时内验证本地日期时间?

c - 在 Solaris 10 上从 C 获取 CPU 使用率统计信息

c++ - QTime QTimer timeout() driven Stopwatch CPU占用率高

java - 使用 GSON 反序列化 java.sql.Date 错误

scala - Future[Future[T]] 到 Future[T] 在另一个 Future.map 中而不使用 Await?

java - 以编程方式捕获 Full GC 计数

java.lang.OutOfMemoryError : Java heap space when i tried to create a BufferedImage 错误

c - ARM处理器上的MIPS计算