CPU Utilization:
就是在一段时间内,进程对CPU的真正使用的时间总和除以统计时间。 占用不等于使用。 比如说一个进程占用CPU 60s, 前20秒运行,中间10秒等待IO,后面有运行20秒,然后再等IO 10秒。则它对CPU的真正使用时间其实只有40秒。 那么当这个值比较高时,就表示对CPU使用可能超负荷了。
Load Average:
它是一段时间内,对CPU正在处理的进程以及等待处理的进程数之和的统计信息, 也就是CPU使用队列的长度的统计信息。如果这个统计新过高,那么就说明对CPU这个资源的竞争就激烈,那么就需要CPU长期高负荷的运行进程。所以负载均衡从一个角度反映了CPU的使用情况。
核和单CPU的关系就是1对1的关系。 1个CPU两个核等同于两个单独的CPU。
单CPU的load average合理值就是 1*0.7。
多CPU或者多核的情况下,就是总数n*1-2。
详细可以参考 理解Load Average做好压力测试, 理解Linux的处理器负载均值
Context Switch Rate:
这个顾名思义就是进程的切换或者中断导致上下文切换。切换的越频繁也就越影响系统的性能。资源都被用来做保护现场了。
下面是对CPU性能分析常用的命令
首先要查看CPU的物理信息,cat /proc/cpuinfo
其中重要的信息有
processor: 逻辑CPU的标识号, 文件中processor出现的次数代表有多少个逻辑CPU
physical id: 物理CPU的标识号,具有相同此标识号的core或线程都被封装于这个物理CPU
cpu core: core所在的CPU具有几个core
core id: core的标识号, 具有相同core id就表示超线程被打开
sibling: core所在的CPU有几个逻辑处理核,如果他的值大于cpu core也说明超线程被打开
逻辑CPU个数:
cat /proc/cpuinfo | grep processor | wc -l
物理CPU个数:
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
core的总数:
cat
/proc/cpuinfo | grep "core id" | uniq | wc -l
查看Load average 信息:
top/uptime 都可看到
[root@rhel61x64 ~]# uptime
10:51:09 up 2 days, 14:21, 5 users, load average: 2.18, 2.20, 2.09
[root@rhel61x64 ~]#
[root@rhel61x64 ~]# cat /proc/loadavg
1.98 2.11 2.07 1/8195 3606
[root@rhel61x64 ~]#
前三个值表示在1分钟,5分钟,15分钟的系统平均进程数。 1/8195 分子代表正在运行的进程数,分母表示总的进程数, 3606 表示上一次运行的进程号
vmstat 查看系统负载:
[root@rhel61x64 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 632700 89712 332 5912 41 17 132 18 1 57 0 2 82 15 0
procs
r 表示所有等待运行时间的进程数,如果长期大于1说明CPU资源不够
b 表示等待资源的进程数,比如IO和内存交换
system
in 每秒钟中断的总数包括时钟中断
cs 每秒中context switch的次数
cpu
us CPU运行uer process的时间
sy CPU运行kernel code的时间
id CPU空闲的时间
wa 等待IO的时间
st CPU从虚拟机偷来的时间
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.