如何使用Java查找CPU负载和应用程序负载?
问题描述:
我想在Tomcat服务器中部署视频播放器Web应用程序,并希望找出每个用户请求的CPU负载以限制用户数量。我能够找出CPU负载,但是,我不确定如何计算每个请求的CPU负载。任何人都可以让我知道,如果我们有任何开源API或任何其他想法将不胜感激?如何使用Java查找CPU负载和应用程序负载?
我使用Adobe Flex开发了Web应用程序,并部署在Apache Tomcat服务器中。
答
我会尝试以下方法:在离开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中执行业务逻辑是不够重,由于不确定性原理,你可以得到奇怪的结果。
查看位于JDK_INSTALL_PATH/demo/management/JTop的jtop demo。我认为这正是你需要的。 – SirVaulterScoff
另一种方法是使用\t \t ManagementFactory.getOperatingSystemMXBean()。getSystemLoadAverage(); – SirVaulterScoff