2013-06-04 66 views
1

當設計具有多個移動部件的應用程序時,這些部件可能會在高負載下最大化,因此可能需要優先考慮應用程序的某些部分。此外,瞭解應用程序的哪一部分是瓶頸,還是最難工作,可能有助於確定應用程序對高負載做出反應的最佳方法。在Java中跟蹤線程負載

有沒有一種通用的方法來確定在Java內的線程基礎上的負載?

+0

這聽起來很像一本教科書的問題。 – mre

+0

在谷歌搜索Java分析器,你會得到很多。 – RGV

+1

mre,這不是教科書問題。我只是選擇不寫在第一人稱。 Rajaganesh,我正在尋找如何在應用程序內部完成它。 – mentics

回答

1

是的,如果平臺支持,您可以。從ThreadMXBean documentation

Java虛擬機實現可能支持測量CPU時間爲當前線程,任何線程,或者沒有線程。

下面是一些示例代碼:

package test.thread.load; 

import java.lang.management.ManagementFactory; 
import java.lang.management.ThreadMXBean; 

public class ThreadLoadTest 
{ 
    public static void main(final String[] args) 
    { 
     final ThreadMXBean bean = ManagementFactory.getThreadMXBean(); 
     for (final long id : bean.getAllThreadIds()) 
     { 
      System.out.println(bean.getThreadInfo(id).getThreadName() 
            + ": " + bean.getThreadCpuTime(id)); 
     } 
    } 
} 

documentation for OperatingSystemMXBean也可能是有用的。

0

設計應明確標識不同類型的任務/用例。然後根據需要,這些任務可以在分離或主線程中執行。您可以爲不同類型的任務創建不同的線程池。然後在系統上運行不同類型的負載測試,以優化線程池的線程數和關聯的隊列大小。一旦達到系統的最佳數量和所需性能,請繼續進行此練習。

希望它有幫助!