2011-11-01 47 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中执行业务逻辑是不够重,由于不确定性原理,你可以得到奇怪的结果。