我有一个java程序,大多数时候需要大约5-10%的cpu。我使用OperatingSystemMXBean.getProcessCpuLoad
有时OperatingSystemMXBean.getProcessCpuLoad
会返回大约0.7-0.8(70-80%)和OperatingSystemMXBean.getSystemCpuLoad
= 1(100%)的值。
最初我虽然我的程序中有一个小问题需要这么多cpu,但是当我在linux控制台中检查top
命令时,java进程大约是5-6%。
现在这是奇怪的部分。在Linux控制台中我做:
sar -u 2 5
我得到了
07:33:10 AM CPU %user %nice %system %iowait %steal %idle
07:33:12 AM all 2.02 0.00 1.01 96.46 0.51 0.00
07:33:14 AM all 1.52 0.00 1.02 96.95 0.51 0.00
07:33:16 AM all 8.16 0.00 2.04 89.29 0.51 0.00
07:33:18 AM all 7.07 0.00 9.60 82.32 1.01 0.00
07:33:20 AM all 4.57 0.00 0.51 94.42 0.51 0.00
Average: all 4.67 0.00 2.84 91.89 0.61 0.00
空闲率为0%; OperatingSystemMXBean.getSystemCpuLoad
计算如下:100-idle
?
现在如果我杀了一个进程(无论什么进程都没关系),例如我重新启动nginx,它消耗大约1%的cpu。
service nginx restart
正在运行sar -u 2 5
会得到以下结果
07:34:49 AM CPU %user %nice %system %iowait %steal %idle
07:34:51 AM all 4.04 0.00 1.52 0.00 0.51 93.94
07:34:53 AM all 1.02 0.00 0.51 0.51 0.51 97.46
07:34:55 AM all 2.53 0.00 1.52 0.00 0.00 95.96
07:34:57 AM all 2.51 0.00 2.01 1.01 1.01 93.47
07:34:59 AM all 3.54 0.00 2.53 20.71 0.51 72.73
Average: all 2.73 0.00 1.62 4.44 0.51 90.71
空闲率约为90%,然后OperatingSystemMXBean.getProcessCpuLoad
和OperatingSystemMXBean.getSystemCpuLoad
恢复正常值,约为5-10%;
关于getSystemCpuLoad的官方文档:https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html#getSystemCpuLoad--
我有什么遗失的吗?
我正在使用CentOS 6.5