proc/stat文件有实时CPU信息:
第一行的数值表示CPU总的使用情况,这些数据都是以clock_tick为单位记录的,这里的clock_tick在绝大多数机器上是10ms。
cpu 273732 21735 288867 3822516 5883 3 5724 0 0 0
解读:
user(273732):从系统启动开始累计到当前时刻,统计CPU执行高优先级用户程序的时间(nice <= 0)。
nice(21735):从系统启动开始累计到当前时刻,统计CPU执行低优先级用户程序的时间(nice > 0)。
system(288867):从系统启动开始累计到当前时刻,CPU处于核心态的时间。
idle(3822516):从系统启动开始累计到当前时刻,系统处于idle进程的时间,Linux提供一种特殊的进程称为idle进程,其pid为0。
iowait(5883):从系统启动开始累计到当前时刻,IO等待时间。
irq(3):从系统启动开始累计到当前时刻,硬中断时间。
softirq(5724):从系统启动开始累计到当前时刻,软中断时间。
steal(0):窃取的时间,虚拟环境被其他操作系统窃取的CPU时间。
guest(0):在内核控制下虚拟出来的CPU访问客户操作系统的时间。
guest_nice(0):Time spent running a niced guest (virtual CPU for guest operating systems under the control of the Linux kernel)
我们日常所关心的CPU性能主要是CPU的利用率,即处于繁忙阶段的时间片占总cpu时间片的比值。基本的计算思想:在尽可能小的时间间隔内取两个cpu的时间状态,
包括处于繁忙的时间片和处于非空闲的时间片,作商即可。
方法1:借助/proc/stat文件。
即取两个尽可能短的时间间隔内的cpu统计数据分别为:
Total1=User1+nice1+system1+idle1+iowait1+irq1+softirq1+steal1+guest1+guest_nice1
Total2=User2+nice2+system2+idle2+iowait2+irq2+softirq2+steal2+guest2+guest_nice2
则CPU-usage=((total2-idle2)-(total1-idle1))/(total2-total1)
方法2:较为简单,这直接用/proc/uptime
第一行的数值表示CPU总的使用情况,这些数据都是以clock_tick为单位记录的,这里的clock_tick在绝大多数机器上是10ms。
cpu 273732 21735 288867 3822516 5883 3 5724 0 0 0
解读:
user(273732):从系统启动开始累计到当前时刻,统计CPU执行高优先级用户程序的时间(nice <= 0)。
nice(21735):从系统启动开始累计到当前时刻,统计CPU执行低优先级用户程序的时间(nice > 0)。
system(288867):从系统启动开始累计到当前时刻,CPU处于核心态的时间。
idle(3822516):从系统启动开始累计到当前时刻,系统处于idle进程的时间,Linux提供一种特殊的进程称为idle进程,其pid为0。
iowait(5883):从系统启动开始累计到当前时刻,IO等待时间。
irq(3):从系统启动开始累计到当前时刻,硬中断时间。
softirq(5724):从系统启动开始累计到当前时刻,软中断时间。
steal(0):窃取的时间,虚拟环境被其他操作系统窃取的CPU时间。
guest(0):在内核控制下虚拟出来的CPU访问客户操作系统的时间。
guest_nice(0):Time spent running a niced guest (virtual CPU for guest operating systems under the control of the Linux kernel)
我们日常所关心的CPU性能主要是CPU的利用率,即处于繁忙阶段的时间片占总cpu时间片的比值。基本的计算思想:在尽可能小的时间间隔内取两个cpu的时间状态,
包括处于繁忙的时间片和处于非空闲的时间片,作商即可。
方法1:借助/proc/stat文件。
即取两个尽可能短的时间间隔内的cpu统计数据分别为:
Total1=User1+nice1+system1+idle1+iowait1+irq1+softirq1+steal1+guest1+guest_nice1
Total2=User2+nice2+system2+idle2+iowait2+irq2+softirq2+steal2+guest2+guest_nice2
则CPU-usage=((total2-idle2)-(total1-idle1))/(total2-total1)
方法2:较为简单,这直接用/proc/uptime
尽管uptime仅有两个数值,但是表示总时间和CPU为idle的时间,已足以计算CPU的利用率,即delta(第一个数值-第二个数值)/delta(第一个数值)
求各CPU单独的利用率的代码:
public class CpuUseInfo {
String cpuName = "cpu"