2012-07-06 64 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使用率的問題。