2012-07-02 57 views
2

自從幾天以來,在一個已經開發了大約一年的系統中,我有一個持續的CPU負載!服務器。我有兩臺服務器,一臺是活動的,另一臺是熱備份。在過去,熱點服務器顯示沒有負載,或可忽略的負載。但現在它消耗一個恆定的50-110%CPU(在Linux上使用最高)。帶有播放框架的CPU負載

有沒有一種簡單的方法來找出是什麼原因呢?我在調試時沒有在MacBook上看到這種行爲(通常爲0.1-1%)。這只是在我知道的前幾天才發生的事情。

這是熱備份的狀態打印。可以看出無控制器從計劃任務查詢分開(不在本服務器上,由於一個標誌執行,但推出):

~  _   _ 
~ _ __ | | __ _ _ _| | 
~ | '_ \| |/ _' | || |_| 
~ | __/|_|\____|\__ (_) 
~ |_|   |__/ 
~ 
~ play! 1.2.4, http://www.playframework.org 
~ framework ID is prod-frontend 
~ 
~ Status from http://localhost:xxxx/@status, 
~ 
Java: 
~~~~~ 
Version: 1.6.0_26 
Home: /usr/lib/jvm/java-6-sun-1.6.0.26/jre 
Max memory: 64880640 
Free memory: 11297896 
Total memory: 29515776 
Available processors: 2 

Play framework: 
~~~~~~~~~~~~~~~ 
Version: 1.2.4 
Path: /opt/play 
ID: prod-frontend 
Mode: PROD 
Tmp dir: /xxx/tmp 

Application: 
~~~~~~~~~~~~ 
Path: /xxx/server 
Name: iDoms Server 
Started at: 07/01/2012 12:05 

Loaded modules: 
~~~~~~~~~~~~~~ 
secure at /opt/play/modules/secure 
paginate at /xxx/server/modules/paginate-0.14 

Loaded plugins: 
~~~~~~~~~~~~~~ 
0:play.CorePlugin [enabled] 
100:play.data.parsing.TempFilePlugin [enabled] 
200:play.data.validation.ValidationPlugin [enabled] 
300:play.db.DBPlugin [enabled] 
400:play.db.jpa.JPAPlugin [enabled] 
450:play.db.Evolutions [enabled] 
500:play.i18n.MessagesPlugin [enabled] 
600:play.libs.WS [enabled] 
700:play.jobs.JobsPlugin [enabled] 
100000:play.plugins.ConfigurablePluginDisablingPlugin [enabled] 

Threads: 
~~~~~~~~ 
Thread[Reference Handler,10,system] WAITING 
Thread[Finalizer,8,system] WAITING 
Thread[Signal Dispatcher,9,system] RUNNABLE 
Thread[[email protected],5,main] WAITING 
Thread[Timer-0,5,main] TIMED_WAITING 
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main] TIMED_WAITING 
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main] TIMED_WAITING 
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main] TIMED_WAITING 
Thread[jobs-thread-1,5,main] TIMED_WAITING 
Thread[jobs-thread-2,5,main] TIMED_WAITING 
Thread[jobs-thread-3,5,main] TIMED_WAITING 
Thread[New I/O server boss #1 ([id: 0x7065ec20, /0:0:0:0:0:0:0:0:9001]),5,main] RUNNABLE 
Thread[DestroyJavaVM,5,main] RUNNABLE 
Thread[New I/O server worker #1-3,5,main] RUNNABLE 

Requests execution pool: 
~~~~~~~~~~~~~~~~~~~~~~~~ 
Pool size: 0 
Active count: 0 
Scheduled task count: 0 
Queue size: 0 

Monitors: 
~~~~~~~~ 
controllers.ReaderJob.doJob(), ms.   ->  114 hits;  4.1 avg;  0.0 min; 463.0 max; 
controllers.MediaCoderProcess.doJob(), ms. ->  4572 hits;  0.1 avg;  0.0 min; 157.0 max; 
controllers.Bootstrap.doJob(), ms.   ->  1 hits;  0.0 avg;  0.0 min;  0.0 max; 

Datasource: 
~~~~~~~~~~~ 
Jdbc url: jdbc:mysql://xxxx 
Jdbc driver: com.mysql.jdbc.Driver 
Jdbc user: xxxx 
Jdbc password: xxxx 
Min pool size: 1 
Max pool size: 30 
Initial pool size: 3 
Checkout timeout: 5000 

Jobs execution pool: 
~~~~~~~~~~~~~~~~~~~ 
Pool size: 3 
Active count: 0 
Scheduled task count: 4689 
Queue size: 3 

Scheduled jobs (4): 
~~~~~~~~~~~~~~~~~~~~~~~~~~ 
controllers.APNSFeedbackJob run every 24h. (has never run) 
controllers.Bootstrap run at application start. (last run at 07/01/2012 12:05:32) 
controllers.MediaCoderProcess run every 15s. (last run at 07/02/2012 07:10:46) 
controllers.ReaderJob run every 600s. (last run at 07/02/2012 07:05:36) 

Waiting jobs: 
~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
controllers.MediaCoderProcess will run in 2 seconds 
controllers.APNSFeedbackJob will run in 17672 seconds 
controllers.ReaderJob will run in 276 seconds 
+2

是Linux下的服務器?你有沒有嘗試重新啓動你的服務器?因爲你可能會受到'leap second' linux內核bug(http://it.slashdot.org/story/12/07/01/1920217/leap-second-bug-causes-crashes)的衝擊 –

+0

Spot-on!重啓後一切恢復正常。如果你想回答這個問題,那麼我會接受答案。 –

+0

完成!謝謝 :-) –

回答

4

如果你的服務器運行在Linux下,你可能會被打由上週末出現的Leap Second bug

這個bug影響Linux內核(線程管理),所以使用線程的應用程序(如JVM,mysql等)可能會消耗CPU的高負載。