Linux下Java进程的CPU占用率100%

  1. 问题描述:昨天朋友告诉我说开发的系统访问很慢。SSH登录远程服务器,重启Tomcat,然后访问,速度依然很慢,后来甚至打不开了。用top命令查看,发现有个java进程CPU占用率为101%,把Tomcat关了,这个进程依然存在,而且CPU居高不下。后来Google了一下,找到的原因归结为:当前版本的Linux内核存在一个称为"Leap Second" 的bug。"Leap Second"翻译为“闰秒”。“闰年”,大家都很熟悉,“闰秒”是啥呢?百度百科定义如下:

    “闰秒”是指为保持协调世界时接近于世界时时刻,由国际计量局统一规定在年底或年中(也可能在季末)对协调世界时增加或减少1秒的调整。由于地球自转的不均匀性和长期变慢性(主要由潮汐摩擦引起的),会使世界时(民用时)和原子时之间相差超过0.9秒,当超过0.9秒时,就把世界时向前拨1秒(负闰秒,最后一分钟为59秒)或向后拨1秒(正闰秒,最后一分钟为61秒);闰秒一般加在公历年末或公历六月末。2012年3月,中科院国家授时中心宣布我国7月1日进行闰秒调整,届时将现7:59:60。

  2. "Leap Second Bug"的产生及带来的负面效应,请参看以下文章:

    ‘Leap Second’ Bug Wreaks Havoc Across Web   

3. "Leap Second Bug"在Linux内核中的提交,请参看以下链接:

    Fix leap-second hrtimer livelock

4. "Leap Second Bug"的解决办法:

  (1). 命令行修改,不需要重启操作系统

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

  说明:我采用这个方法后问题依旧存在,不少老外好像通过这个方法把问题解决了,附上两篇文章给大家看一下:

      A fix for the Java Leap Second bug

      java using 100% cpu on CentOS/RHEL 6

  (2). 升级当前版本的操作系统内核

  我的操作系统是CentOS 5.9,我把它在线升级成CentOS 5.10,然后重启,升级命令:

# yum -y update

你可能感兴趣的:(Linux下Java进程的CPU占用率100%)