2012-07-06 17 views
0

Ubuntu,11.04,11.10。 tomcat 7.0.25-7.0.28,jdk sun 1.6_30 - 1.6_33。新鲜和空Tomcat 7.0安装吃了很多CPU

解压缩,删除的webapp文件夹。 catalina启动后顶部显示 CPU在1cpu x64 4核心上吃tomcat 170%。在2cpu x64 4core它 显示高达400%。

在tomcat中没有安装应用程序。试图找出 线程消耗的CPU - 下面是5的顶部螺线:

"VM Periodic Task Thread" prio=10 tid=0x0000000040a7f000 nid=0x166c waiting on condition 

"ajp-bio-8009-AsyncTimeout" daemon prio=10 tid=0x00007feaf0666800 nid=0x16ad sleeping[0x00007feafe011000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 
     at java.lang.Thread.sleep(Native Method) 
     at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:148) 
     at java.lang.Thread.run(Thread.java:662) 

"http-bio-8080-AsyncTimeout" daemon prio=10 tid=0x000000004204f800 nid=0x16ab waiting on condition [0x00007feafead1000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 
     at java.lang.Thread.sleep(Native Method) 
     at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:148) 
     at java.lang.Thread.run(Thread.java:662) 

"ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=10 tid=0x0000000041d1b800 nid=0x16a9 sleeping[0x00007feafe405000] 
    java.lang.Thread.State: TIMED_WAITING (sleeping) 
     at java.lang.Thread.sleep(Native Method) 
     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1517) 
     at java.lang.Thread.run(Thread.java:662) 

"VM Thread" prio=10 tid=0x0000000040a39000 nid=0x1665 runnable 

看起来没什么interresting。所以,我被困住了。任何人 知道哪里可以走得更远?还有一件事:有几个虚拟的 框与几乎相同的设置 - 并且从来没有看到如此巨大的CPU消耗。

+0

确保你没有被闰秒错误所击中。 (你可能需要重启,如果你自6月30日以来没有这样做) – nos 2012-07-06 12:09:35

+0

小测试哪个只运行Thread.sleep主要消耗高达〜80%cpu。有没有办法解决它,而无需重新启动?我只是无法重新启动主机。 – user1171379 2012-07-07 07:02:38

+0

你说得对。固定。 /etc/init.d/ntp stop;日期; date'date +“%m%d%H%M%C%y。%S”';日期;在这里找到https://groups.google.com/forum/?fromgroups#!topic/railo/-hz3ckuaCT0。无需重启。 – user1171379 2012-07-07 07:13:49

回答

1

处于状态TIMED_WAITING的线程不需要CPU周期。只要所有线程都处于这种状态,Tomcat就不能成为加载的原因。

你还能做什么?

  1. 在分析器中运行Tomcat。与线程转储(它只显示当前状态)不同,分析器将收集分析信息。这将允许您查看哪些方法使用了多少时间。

  2. 在webapp文件夹中留下至少一个应用程序。我不确定当Tomcat没有找到什么什么要做什么。

  3. 检查Tomcat是否查找您认为它确实存在的webapp文件夹。也许一个环境变量可以影响这个。

  4. 这可能是因为Tomcat开始。不太可能,但也许等几分钟可能会有所帮助。

  5. 你剩下多少RAM?也不太可能,因为这应该会产生巨大的负载,但CPU会相当闲置。

+0

19061 mike 20 0 4370m 95m 9.8m S 169 0.6 1:00.74 java – user1171379 2012-07-07 06:35:18

+0

正在运行的tomcat实例消耗了170%cpu。 catalina.out声称“INFO:Server在595毫秒内启动”。没关系,它包含任何webapp或不。以上列出的消费者约占60%,其他消费约占30%。这是我写在这里的主要原因。上面的线程除了消耗所有的CPU之外什么也不做。 – user1171379 2012-07-07 06:48:06

+0

在分析器中运行它。有可能Tomcat正在快速连续处理大量请求,但你不会看到它们,因为它发生得太快。或者在调试器中启动Tomcat,并在调用Thread.sleep()'/'Object.wait()'的地方设置断点。同时检查超时给定;带有1ms超时的'Thread.sleep()'将非常像一个无限循环。 – 2012-07-09 07:38:48

1

我在java“VM周期任务线程”中遇到了CPU使用率过高的问题。

问题的原因最终结果是由于闰秒的Linux问题,详见本博文:java leap second bug – 30 June/1 July 2012 – fix

按照列出的步骤(停止ntpd,重置日期,重新启动ntpd)解决了高CPU使用率的问题。