CPU负载和利用率linux
CPU 的负载和利用率是两个不一样的概念,可是他们均可以在top命令中查看。CPU利用率显示的是程序在运行期间实时占用的CPU百分比,而CPU负载显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着CPU的负载大。二者之间没有必然的关系。ios
经常使用命令介绍:nginx
* uptimeweb
首先咱们须要明白load average后面的三个数字表明什么,他们分别表明前一分钟,五分钟,十五分钟的CPU负载,通常来讲较重要的指标是最后一个,由于咱们须要尽可能避免一些突发的状况。那么这些数字处于什么区间是正常的呢?首先咱们须要知道,这些数字是和你的服务器的CPU核数是紧密相关的,若是你只有一个核的话,那么数字为1.0就表示恰好在CPU的承受范围以内。这些数字固然是越小越好,可是理论上0.0~1.0之间都是正常范围。根据经验来讲,若是一直在0.7上下,那么说明你可能须要花些时间来调查;若是长期徘徊或者超过1.0,那么你就须要进行修复啦!apache
对应的,提供查看linux下查看逻辑CPU的命令:缓存
* top服务器
top命令不只能够查看当前系统的平均负载,还能够查看不一样进程对于CPU、内存等资源的使用状况。并发
默认状况下,top命令是以CPU使用率由高到低排序显示进程信息的,在 top 信息界面按 K 键,并输入想要终止的PID,就能够直接杀死指定进程。
top的 -b 选项开启批处理模式,将每次刷新所有打印到stdout
top的 -n 选项指定退出top命令前刷新多少次信息。
top命令的输出:
第1行:与uptime相同;
第3行:当前的CPU运行状况:
us:非nice用户进程占用CPU的比率
sy:内核、内核进程占用CPU的比率;
ni:若是一些用户进程修改过优先级,这里显示这些进程占用CPU时间的比率;
id:CPU空闲比率,若是系统缓慢而这个值很高,说明系统慢的缘由不是CPU负载高;
wa:CPU等待执行I/O操做的时间比率,该指标能够用来排查磁盘I/O的问题,一般结合wa和id判断
hi:CPU处理硬件终端所占时间的比率;
si:CPU处理软件终端所占时间的比率;
st:流逝的时间,虚拟机中的其余任务所占CPU时间的比率;函数
用户进程占比高,wa低,说明系统缓慢的缘由在于进程占用大量CPU,一般还会伴有较低的id,说明CPU空转时间不多。
wa低,id高,能够排除CPU资源瓶颈的可能。
wa高,说明I/O占用了大量的CPU时间,须要检查交换空间的使用,交换空间位于磁盘上,性能远低于内存,当内存耗尽开始使用交换空间时,将会给性能带来严重影响,因此对于性能要求较高的服务器,通常建议关闭交换空间。另外一方面,若是内存充足,但wa很高,说明须要检查哪一个进程占用了大量的I/O资源。性能
* iostat
若是iowait过长,说明是磁盘瓶颈;system过长,说明是内核瓶颈。
在Device一行,能够看到一些IO指标:
tps: 每秒I/O传输请求量;
Blk_read/s:每秒读取多少KB;
Blk_wrtn/s:每秒写多少KB;
Blk_read:一共读了多少KB;
Blk_wrtn:一共写了多少KB
* sar
sar命令查看CPU、内存和磁盘记录。默认状况下,sar命令显示当天的统计信息,不带参数显示CPU统计信息,参数-r显示收集的内存记录,-b显示磁盘I/O
查看当天CPU使用:
查看当天内存使用:
查看当天IO统计:
另外,可使用参数-s和-e限定查看的时间,使用参数-f查看本月内以前某一天的历史统计信息,例如:sar -s 20:00:00 ; sar -f /var/log/sysstat/sa08
*vmstat
相比top,这个能够看到整个机器的CPU,内存,IO的使用状况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不同)
vmstat后面跟两个参数,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数(能够缺省)。
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。
b 表示阻塞的进程。
swpd 虚拟内存已使用的大小,若是大于0,表示你的机器物理内存不足了,若是不是程序内存泄露的缘由,那么你该升级内存了或者把耗内存的任务迁移到其余机器。
free 空闲的物理内存的大小。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存。
cache cache直接用来记忆咱们打开的文件,给文件作缓冲,用空闲的一部分物理内存作缓存,提升程序执行的性能。
si 每秒从磁盘读入虚拟内存的大小,若是这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so 每秒虚拟内存写入磁盘的大小,若是这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上全部的磁盘和其余块设备,默认块大小是1024byte,我本机上没什么IO操做,因此一直是0。
bo 块设备每秒发送的块数量,例如咱们读取文件,bo就要大于0。bi和bo通常都要接近0,否则就是IO过于频繁,须要调整。
in 每秒CPU的中断次数,包括时间中断。
cs 每秒上下文切换次数,例如咱们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,咱们通常作性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程能够由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,咱们的代码就会进入内核空间,致使上下文切换,这个是很耗资源,也要尽可能避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,致使CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间。
sy 系统CPU时间,若是过高,表示系统调用时间长,例如是IO操做频繁。
d 空闲 CPU时间,通常来讲,id + us + sy = 100,通常我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间。
经常使用的获取Cpu负载和性能的命令大概就总结这么多把,还有一些是关于使用taskset绑定进程到指定CPU上的,我本身并无使用过,就不在此展开了。