2011-11-01 71 views
1

我想在Tomcat服務器中部署視頻播放器Web應用程序,並希望找出每個用戶請求的CPU負載以限制用戶數量。我能夠找出CPU負載,但是,我不確定如何計算每個請求的CPU負載。任何人都可以讓我知道,如果我們有任何開源API或任何其他想法將不勝感激?如何使用Java查找CPU負載和應用程序負載?

我使用Adobe Flex開發了Web應用程序,並部署在Apache Tomcat服務器中。

+2

查看位於JDK_INSTALL_PATH/demo/management/JTop的jtop demo。我認爲這正是你需要的。 – SirVaulterScoff

+2

另一種方法是使用\t \t ManagementFactory.getOperatingSystemMXBean()。getSystemLoadAverage(); – SirVaulterScoff

回答

0

我會嘗試以下方法:在離開Servlet時

在Web應用程序,你可以計算出每個請求sustracting進入servlet來總的CPU線程時候總CPU線程時間,CPU使用率(線程) 。

事情是這樣的:

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ... 
{ 
    long iniCpuTime, endCpuTime, iniTs, endTs, threadId; 

    ThreadMXBean mxBean = ManagementFactory.getThreadMXBean(); 

    if (mxBean.isThreadCpuTimeSupported()) { 
    threadId = Thread.currentThread().getId(); 
    iniTs = System.currentTimeMillis(); 
    iniCpuTime = mxBean.getThreadCpuTime(threadId); 
    } 

    // Business logic 
    .... 

    if (mxBean.isThreadCpuTimeSupported()) { 
    endTs = System.currentTimeMillis(); 
    endCpuTime = mxBean.getThreadCpuTime(threadId); 

    float cpu = (endCpuTime-iniCpuTime)/(float)((endTs-iniTs)*1000000); 

    System.out.println("Request CPU usage (%): "+(cpu*100)); 
    } 
} 

但要注意,如果在servlet中執行業務邏輯是不夠重,由於不確定性原理,你可以得到奇怪的結果。