CPU相关
核心数
# 获取物理核心数
grep 'core id' /proc/cpuinfo | sort -u | wc -l
# 获取逻辑核心数
grep -c '^processor' /proc/cpuinfo
# 同时显示物理核心数和逻辑核心数
echo "物理核心数=$(grep 'core id' /proc/cpuinfo | sort -u | wc -l), 逻辑核心数=$(grep -c '^processor' /proc/cpuinfo)"
物理机和虚拟机
# 虚拟机
grep -E "hypervisor|vmx|svm" /proc/cpuinfo
/proc/${PID}/stat文件说明
重要字段说明
utime (14):进程在用户态运行的时间(时钟滴答数jiffies)
stime (15):进程在内核态运行的时间(时钟滴答数)
cutime (16):子进程在用户态运行的时间
cstime (17):子进程在内核态运行的时间
starttime (22):进程启动时间(可用于计算进程存活时间)
awk '{print $1,$2,$14,$15,$16,$17}' /proc/${PID}/stat
# 52个字段
awk '{print NF}' /proc/${PID}/stat
awk '{for(i=1;i<=NF;i++) print i, $i}' /proc/${PID}/stat
awk '{for(i=1;i<=NF;i++) print i": "$i}' /proc/${PID}/stat
时钟滴答(clock tick)说明
Linux系统通常每秒有100个时钟滴答(可通过sysconf(_SC_CLK_TCK)
或getconf CLK_TCK
获取实际值),因此计算CPU使用率时需要将滴答数除以这个频率得到秒数。
/proc/stat文件说明
CPU 使用统计(核心部分)
格式:cpuN user nice system idle iowait irq softirq steal guest guest_nice
字段说明(所有值都是时钟滴答数,单位通常是 jiffies):
• user:用户态运行时间
• nice:低优先级用户态运行时间(nice值>0的进程)
• system:内核态运行时间
• idle:空闲时间(不含IO等待)
• iowait:等待IO完成的时间
• irq:处理硬件中断的时间
• softirq:处理软件中断的时间
• steal:虚拟环境下被hypervisor偷走的时间
• guest:运行虚拟CPU的时间(Linux 2.6.24+)
• guest_nice:低优先级虚拟CPU时间(Linux 2.6.33+)
grep '^cpu ' /proc/stat