2012-11-26 24 views
0

我似乎對重負載的多線程Java應用程序(使用客戶端JVM開始)的處理器使用情況有一個奇怪的解讀。Java多線程峯值處理器使用情況

問題是,即使在負載很重的情況下,處理器使用率也達到了99.9%(使用Debian Linux Kernel 2.6上的頂級系統實用程序)。這看起來很奇怪,因爲服務器是8核心的,因此我認爲對於重負載來說,有些東西會超過100%。

是否有我應該考慮的任何JVM選項或我應該查看的任何系統參數?

我目前使用JVM啓動參數如下:

java -XX:PermSize=128M -XX:MaxPermSize=512M -Xss1024k -Xms512M -Xmx2048M 
+0

好吧,對於高處理器負載,99.9%的利用率真的很奇怪。真正加載處理器應該高出多少? – Val

+0

如果按'I'(這是大寫'i')在'頂部'切換Irix模式會發生什麼? –

+0

@Hristo Iliev - 下降到18%左右。它在6-10%。該服務器是8核心* 2線程。 –

回答

1

所觀察到的處理器使用的最可能的原因是,你的應用程序有一個併發的瓶頸被有效地將其限制在一個單一的速度平均線程。

更改JVM選項不太可能產生顯着差異。您需要使用Java性能分析器來確定瓶頸的位置,並找出如何消除這些瓶頸。

+0

我在想同樣的事情,但處理器使用率在99.9%達到峯值並不奇怪嗎?如果瓶頸是問題的根源,那麼我認爲處理器的使用將會停留在那個級別的某處。僅使用一個處理器的99.9%可以使應用程序需要更多的CPU資源用於進程密集型任務,並且不會得到它。 –

+0

想想看......不是必需的。如果所有線程都等待處理器密集型的單個其他線程,則會出現上述情況。真正。我會再介紹一些。謝謝。 –

+0

好吧,我檢查了剖析器和完全相同的系統pid,它報告的平均CPU使用率低於15%。頂級系統實用程序在相同的時間間隔內檢測到99.9%的CPU使用率。我很困惑。 –

1

重負載的多線程Java應用程序(使用客戶端JVM開始)。

這聽起來像個壞主意。客戶端VM適用於小型輕量級應用程序,如32位系統上的小應用程序。我建議你使用Linux,Solaris和64位Windows上的默認服務器虛擬機。

這似乎很奇怪,因爲服務器是一個8核心,因此我認爲對於重負載來說,要求進入> 100%teritory的東西。

這意味着您的應用程序實際上是單線程的。您可能會嘗試使用多個線程,但除非它們可以獨立運行,否則它們一次不能運行多個線程。

是否有我應該考慮的任何JVM選項或我應該查看的任何系統參數?

命令行選項無法控制此操作。完全取決於你的線程如何相互作用。