如何使用Java查找CPU负载和应用程序进程负载?

时间:2011-11-01 05:37:24

标签: java performance cpu-usage

我想在Tomcat服务器中部署视频播放器Web应用程序,并希望找出每个用户请求的CPU负载以限制用户数量。我能够找出CPU负载,但是,我不知道如何计算每个请求的CPU负载。任何人都可以告诉我们,如果我们有任何开源API或任何其他想法将不胜感激吗?

我使用Adobe Flex开发了Web应用程序并部署在Apache Tomcat Server中。

1 个答案:

答案 0 :(得分:0)

我会尝试以下方法:

在Web应用程序中,您可以计算每个请求(线程)的CPU使用率,以便在进入servlet时将CPU线程总时间提取到离开servlet时的总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中执行的业务逻辑不够严重,由于不确定性原则,您可能会得到奇怪的结果。