2010-09-17 1157 views
8

我們有一個新的客戶端,目前我們正在對100個併發http線程(使用Jmeter)的服務器進行壓力測試。問題是即使我們有2個Xeon處理器(每個CPU有4個內核,總共爲8個內核),我只能看到使用4個內核而不是8個內核的tomcat。這4個內核我認爲它只屬於1個處理器。其他4個線程幾乎在睡覺。如何配置Tomcat使用多個CPU?

我從Apache的文檔的印象,如果我們有多個CPU的機器,我們應該配置acceptorThreadCount =「2」: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

我們必須改變默認的連接器tomcatThreadPool與maxThreads =「150」 minSpareThreads =「4」,連接器執行器的acceptorThreadCount =「2」。但它仍然只使用1個CPU。

任何想法如何配置利用所有核心(或所有CPU的處理器)?

+1

JVM執行利用率,所以可能你的負載還不夠高。你能增加並嘗試嗎? – JoseK 2010-09-17 10:19:59

+0

我已嘗試200和300線程,它仍然是相同的。 – Reusable 2010-09-17 12:06:58

+0

哪個操作系統在運行? – Sean 2010-09-17 12:56:51

回答

3

一些隨機的想法來幫助你。

JVM將在內部執行其自己的任務調度。有些時候,如果JVM不認爲一個CPU被過度徵稅,它可能爲關鍵操作預留幾個核心。因此你會看到一些正在使用的核心和其他正在閒置的核心

另一種可能性是CPU親和力需要明確設置。 在Unix中,你可以檢查哪些CPU的JVM中已經選擇了與使用taskset command ::

taskset -p <pid> 

在Windows中,打開你的任務管理器,轉到進程選項卡,右鍵單擊一個程序,然後選擇設置親和力。你可以看到哪些CPU /內核被設置爲使用。

我不知道Java/Tomcat中的啓動參數來控制CPU使用率。我相信這應該在OS級別上。我也不記得曾閱讀過有關編碼的JVM,以限制正在使用的CPU /內核的數量。

2

評論由@JoseK觸發整個瓶頸。我們的應用程序正在編寫太多日誌。在一個實例中,我們試圖減少日誌文件中的日誌量,我們注意到整體性能更好,CPU利用率更高。

然後我們用log4k日誌級別嘗試「WARN」,哇!該應用程序正在使用所有CPU核心的70%。

我們應該在詢問問題之前檢查磁盤利用率。謝謝!

+0

這可能不是磁盤訪問,而是日誌框架中的內部鎖定,可以讓您的應用程序更加連續地執行。 – nos 2010-10-19 11:12:23

+0

可能。我們現在所知道的是關閉日誌,應用程序表現更好。我還有2天時間玩。 Log4j中是否有更好的日誌框架或特殊配置可以更快? – Reusable 2010-10-19 23:59:28

+0

@可重複使用:現在來不及得到任何幫助---大多數日誌框架都有網絡appender。他們傾向於不受你描述的文件鎖定問題的困擾。 – 2014-02-05 13:44:53