CentOS 6 中的 JVM 总是超过 100% CPU 使用率

Posted

技术标签:

【中文标题】CentOS 6 中的 JVM 总是超过 100% CPU 使用率【英文标题】:JVM always beyond 100% CPU usage in CentOS 6 【发布时间】:2012-07-02 06:04:50 【问题描述】:

下午好。我的 CentOS 6(64 位)服务器上的 Java VM 遇到了一个非常令人费解的问题。它是具有四核 CPU(具有超线程)、16GB RAM 和 2TB 硬盘空间(在软件 RAID1 上)的服务器。我想我会在这里问,因为根据常见问题解答,关于开发人员使用的“常用工具”的问题是适当的。希望有人能对这个问题有所了解。

我每天 24 小时在服务器上运行一个 Java 软件。今天早些时候(在服务器区域设置的午夜后几个小时检测到,这是值得注意的,因为这是本月的第一天)我收到连接到该软件的用户报告,因为客户端突然变得无法使用。 JVM 从未中断或重新启动。上一次重启是在几天前,从那以后一直正常运行(使用大约 5% 或更少的 CPU,这很正常)。

这一次,当我检查进程时,它实际上正在吞噬所有可以从服务器上运行的其他应用程序争夺的 CPU 时间(如 top 所报告),或者超过 100%(如 ps 所报告) )。我尝试停止并重新启动应用程序,但一旦它运行,CPU 使用率会立即再次飙升至 100% 以上。内存使用正常。我尝试了不同的 JVM 标志,但无济于事。我尝试下载最新版本的软件并进行全新安装,但这也无济于事。最后,我尝试下载另一个,完全不同的 Java 软件,但是当我在服务器上运行它时,它遇到了同样的问题。

当我下载软件并在我的电脑上运行它时,CPU 使用率是正常的。因此,我假设服务器出错了,但我无法想象它可能是什么。服务器的 JVM 是最新的,来自标准的存储库包(没有任何定制)。

来自 java -version:

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.3) (rhel-1.48.1.11.3.el6_2-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

来自 uname -a:

2.6.32-131.21.1.el6.x86_64 #1 SMP Tue Nov 22 19:48:09 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux

来自centos-release/redhat-release/system-release:

CentOS release 6.2 (Final)

免费报告大约 14.5gb 可用 RAM。 df 报告 /home 分区(有问题的软件及其所有文件所在的位置)中大约有 1.4tb 可用磁盘空间。

有什么想法吗?请询问您是否需要更多数据,并随时建议我尝试/检查的程序。在查找问题时,我发现有几个人在 JVM 窃取 CentOS 上的所有 CPU 时遇到问题,但似乎没有一个与我的问题相符。

【问题讨论】:

今天是闰秒。现在计时器将在设置前 秒到期!重启。 哦。我会让你知道它是否有效,以便你稍后将其作为答案发布。 这完全有效。谢谢。如果没有具体原因,我通常无法重新启动服务器,因为它会中断所有客户的服务。 【参考方案1】:

您可能想尝试以下命令

# service ntpd stop; date -s "`date`";service ntpd start;

我有内核 2.6.32-220.el6.x86_64 和 jdk1.7.0_04 的 CentOS6,通过上述命令观察并解决了高 CPU。无需重启操作系统。

这似乎是 linux 内核的错误,如 https://access.redhat.com/knowledge/solutions/154793 所述。上述修复在http://blog.wpkg.org/2012/07/01/java-leap-second-bug-30-june-1-july-2012-fix/

中进行了描述

【讨论】:

这也为我修复了内核 2.6.32-220.17.1.el6.x86_64 #1 SMP 和 java "1.6.0_24" OpenJDK (IcedTea6 1.11.3) (rhel-1.48.1.11) .3.el6_2-x86_64) (build 20.0-b12, 混合模式)【参考方案2】:

我可以确认 Fedora 14、Tomcat 6 和 OpenJDK 1.6 上存在此问题。 Mysticial 的解决方案也对我有用。

uname -ar:

2.6.35.14-103.fc14.x86_64 #1 SMP Thu Oct 27 15:41:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

java-版本:

java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.10) (fedora-55.1.9.10.fc14-x86_64)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

【讨论】:

【参考方案3】:

我还可以确认 RHEL 6、Tomcat 7 和 Sun/Oracle Java 7 & Java 6 中存在的问题。

ntpd stop; date; ntpd start 命令有效。

uname:
2.6.32-220.2.1.el6.x86_64 #1 SMP Fri Dec 23 02:21:33 CST 2011 x86_64 x86_64 x86_64 GNU/Linux

【讨论】:

以上是关于CentOS 6 中的 JVM 总是超过 100% CPU 使用率的主要内容,如果未能解决你的问题,请参考以下文章

用python提前预测jvm cpu100%自动dump thread升级版

用python提前预测jvm cpu100%自动dump thread升级版

swift 编译器总是 100% CPU

为啥 Symfony 调试工具栏中的计时器(分析器)超过 100% 时间?

Java内存使用异常导致CPU100%原因(线上JVM排查之二)

Java内存使用异常导致CPU100%原因(线上JVM排查之二)