基本概念:
CPU使用率:通过测量一段时间内cpu实例忙于执行工作的时间比例获得,以百分比表示
CPI(每指令周期数):用来描述cpu如何使用它的时钟周期,同时也可以用来理解CPU使用率的本质;CPI较高代表cpu进场陷入停滞,通常都是在访问内存,较低的CPI表示cpu基本没有停滞,指令吞吐较高
IPC(每周期指令数):它为CPI的倒数
饱和度:一个100%使用率的cpu称为饱和
CPU使用说明例子:
CPU
很无辜,是个任劳任怨的打工仔,每时每刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),由老板(进程调度)来决定他该干什么,他需要
和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),部分工作做完以后还需要及时向老板汇报(中断),所以打工仔(CPU)除了做自己该做
的工作以外,还有大量时间和精力花在沟通和汇报上。
打工仔接受和完成多少任务并向老板汇报了(中断);
打工仔和老板沟通、协商每项工作的工作进度(上下文切换);
打工仔的工作列表是不是都有排满(可运行队列);
打工仔工作效率如何,是不是在偷懒(CPU 利用率)。
性能命令如下:
uptime
top
vmstart
mpstat
pidstat
说明如下:
uptime命令,用来统计系统当前的运行状态
12:02:32 up 235 days, 18:58, 4 users, load average: 0.02, 0.10, 0.07
其中load average这三个值表示系统在1min,5min,15min内的平均负载,这三个值一般不能大于系统CPU的个数。如果长期大于cpu个数表示cpu不足以服务线程,说明cpu繁忙,有些线程在等待,可能会影响系统性能
平均负载:表示对cpu资源的需求,通过汇总正在运行的线程数(使用率)和正在排队等待运行的线程数(饱和度)计算得到.
top 查看负载情况 主要关注负载1,5,15min
该命令显示了最消耗cpu的任务,并带有cpu消耗百分比,TIME和%CPU显示了CPU占用的时间(这里是分钟时间)
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head 查看占用cpu资源最多的10个进程方法
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head 查看占用内存资源最多的10个进程方法
ps -eo comm,pid,pcpu,pmem --sort -pcpu | head -20
vmstart 命令(虚拟内存统计),最后几列显示了cpu平均负载,少于10%可能是一个有问题
vmstart [-V] [-n] [delay [count]]
-V 表示打印出版本信息,可选参数
-n 表示在周期性循环输出,输出的头部信息仅显示一次
delay 表示两次输出之间的时间间隔
count 表示按照“delay”指定的时间间隔统计的次数,默认为1次
vmstart 3 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 7400 171448 171212 7667080 0 0 70 605 0 0 2 1 97 1 0 0 0 7400 171828 171212 7667100 0 0 0 2387 1322 1572 1 1 99 0 0
在cpu评估中,主要注意procs项中的r项的值和cpu项中us、sy和id列的值
这些值都是所有cpu的系统平均数,r除外,是总数
r 应小于cpu个数
当脏页达到内存页面设置的值时,开始写入硬盘,通过 /sbin/sysctl -n vm.dirty_background_ratio 查看,默认值为10
当系统物理内存剩余量在该值范围时,开始大量使用swap交换空间
r,所有等待的加上正在运行的线程数,这些线程都是可运行状态,只不过 CPU 暂时不可用;
b,被 blocked 的进程数,正在等待 IO 请求;
in,被处理过的中断数
cs,系统上正在做上下文切换的数目
us,用户占用 CPU 的百分比
sys,内核和中断占用 CPU 的百分比
wa,所有可运行的线程被 blocked 以后都在等待 IO,这时候 CPU 空闲的百分比
id,CPU 完全空闲的百分比
swpd,已使用的 SWAP 空间大小,KB 为单位;
free,可用的物理内存大小,KB 为单位;
buff,物理内存用来缓存读写操作的 buffer 大小,KB 为单位;
cache,物理内存用来缓存进程地址空间的 cache 大小,KB 为单位;
si,数据从 SWAP 读取到 RAM(swap in)的大小,KB 为单位;
so,数据从 RAM 写到 SWAP(swap out)的大小,KB 为单位;
bi,磁盘块从文件系统或 SWAP 读取到 RAM(blocks in)的大小,block 为单位;
bo,磁盘块从 RAM 写到文件系统或 SWAP(blocks out)的大小,block 为单位;
mpstat命令(每个CPU统计信息),检查单个cpu是否繁忙
mpstat -P ALL 1
05:43:50 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 05:43:51 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 05:43:51 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
-P ALL 用来打印每个CPU的信息
-P 1 1 用来打印第二个cpu的信息
%usr :用户态时间
%nice :以nice优先级运行的进程用户态时间
%sys :系统态时间(内核)
%iowait :I/O等待
%irq :硬件中断CPU用量
%soft :软件中断CPU用量
%steal :耗费在服务其他租户的时间
%guest :花在访客虚拟机的时间
%idle:空闲时间
重要列有:usr,sys和idle
pidstat 按进程或线程来打印cpu用量,包括用户态和系统态时间的分解,默认情况下仅输出活动的进程的信息
pidstat 1
05:49:59 PM PID %usr %system %guest %CPU CPU Command 05:50:00 PM 37 0.00 0.99 0.00 0.99 3 kblockd/3 05:50:00 PM 60 0.00 0.99 0.00 0.99 0 kswapd0 05:50:00 PM 18520 0.99 0.99 0.00 1.98 0 pidstat 05:50:00 PM 18524 0.00 16.83 0.00 16.83 0 tar 05:50:00 PM 18525 53.47 13.86 0.00 67.33 0 gzip
-t 打印每个线程的统计信息
-p ALL 用来打印所有的进程,包括空闲进程
PS:相关内容参照《性能之巅-洞悉系统、企业与云计算》第6章-cpu章节
本文出自 “天天向上goto” 博客,请务必保留此出处http://ttxsgoto.blog.51cto.com/4943095/1729489
原文地址:http://ttxsgoto.blog.51cto.com/4943095/1729489