10.1 使用w查看系统负载
学习如何监控系统状态,是因为作为一个运维工程师需要了解Linux系统运行时的各种信息和状态,当出现问题的时候就能够查找出问题的所在,这样才能对症下药的去解决。
w命令可以查看当前系统的负载:
负载信息表示的意义:
使用此命令可查看系统的cpu数量:
cat /proc/cpuinfo 显示的是逻辑cpu数量,不是物理cpu数量:
从文件内容可以看出我这里CPU数量为4,所以在负责信息的负载情况里的数值不超过4是最理想的,既不忙也不闲。如果CPU数量为0那么数值不超过1是最理想,也就是说负载数值不超过CPU的数量是最好的。如果负载数值大于CPU数量的话,那么就会有进程需要进行等待。
uptime命令也能够查看系统负载情况,不过查看不了用户的登录信息,所以大部分情况下都是用w命令:
10.2 vmstat命令
当系统负载值偏高的时候,CPU不够用了,想要知道是哪些进程在使用着CPU,可以使用vmstat命令查看:
一般使用vmstat命令的时候会加个数字1,表示每一秒显示一次,动态的显示信息也可以:
也可以再加一个数字定义显示几次就结束,例如我只需要显示5次就结束:
在以上使用vmstat命令得出的信息我们一般只需要关注r、b、swpd、si、so、bi、bo、us、sy、id、wa这几个列:
r是run的简写,表示有多少个进程处于run的状态,就算进程在等待也是run的状态。
b是block的简写,表示进程被CPU以外的资源给阻断了,处于一个等待状态,也就是卡住、堵塞的状态。
swpd就表示交换分区和内存交换数据的情况、信息,当系统内存不够了,这一列就会有数值信息波动,数值为0则是内存还是足够的状态。
si、so和swpd有关系,当swpd有数值变化时,si、so也会出现数值的变动。数值表示的意思是有多少KB的数据正在从swap分区输出到内存中,和从内存输入到swap分区中,因为si表示的是swap input,so则是swap output,也就是输入\出的意思,这一点和io流的意思是一样的。
bi、bo的数值是和磁盘有关系的,bi表示的是从磁盘里读取数据到内存中的数值,bo则是从内存里输出数据到磁盘中的数值。如果这个数值很大的话,就表示内存和磁盘在频繁的输入输出数据,而且会导致b列数值的增加,因为内存和磁盘在频繁的输入输出数据会导致系统运行缓慢从而令一些进程进入等待状态。
us表示用户级别的一些资源占用,例如系统里的一些服务像数据库服务什么的或者在系统中搭建运行着的网站,这些都会占用着资源。us列的数字不会超过100,因为这是一个百分比。如果这个数值长时间大于50,就表示系统资源不够用了。
sy表示系统本身的一些进程、服务占用CPU的百分比。
id表示空闲的百分比,us、sy数值处于0时,id列的数值就是100,所以id列的数值就是以100减去us、sy相加的数值。
wa是wait的简写,和b列是类似的,表示等待CPU资源的百分比,也就是说有多少百分比的进程在等待CPU的执行。
所以通过vmstat命令得出的信息,可以判断哪些资源不够用,或者处于空闲状态,能够监控到各种资源使用率的信息。
10.3 top命令
top命令可以具体查看进程使用资源情况,top命令是三秒钟更新一次信息,是动态显示的,第一行是系统负载信息,第二行表示各种状态中的任务数量,这些任务也就是进程。第三行是CPU的百分比,第四行表示的是物理内存的使用情况,第五行表示swap交换分区的的使用情况:
Shift+m使用内存使用率来排序,同样的是由高到低:
Shift+p切换回按CPU排序。
按数字1,会列出所有的逻辑CPU使用情况:
再按1则切换回平均值的查看方式。
按q键可以退出这个界面,top -c可以看到具体的进程、命令、全局的路径。top -bn1 可以静态地显示,会一次性地把所有的进程信息都列出来,一般适合在写脚本的时候使用。PID是进程的id,要想杀掉某个进程时,使用kill加进程的PID即可,USER表示这个进程是由哪个用户运行的:
10.4 sar命令
sar是一个非常全面的分析系统状态的命令,sar被称做Linux系统里的“瑞士军刀”,也即是说这个命令的功能非常的复杂和丰富,如果你的系统里没有这个命令,则需要安装sysstat包:
下载完使用这个命令可能会出现无法打开文件的情况:
这是因为sar命令不加任何选项的话,会默认调用它在系统中保留的历史文件。
/var/log/sa/路径是sar命令生成历史文件的目录,sar有一个特性会每10分钟把系统的状态保存到文件里,而这个文件就会放在这个路径下。
sar -n DEV 1 3命令可以查看网卡流量,数字1表示的是每1秒钟更新一次信息,数字3则是表示更新到第3次就结束,第一列是时间,第二列是网卡的名字,第三列是接收的数据包数量,第四列是发送的数据包数量。第五列是接收的数据量,第六列是发送的数据量,单位是KB。最后的三列不需要关注,因为不怎么用得到而且数值基本不会超过0:
正常情况下数据包数量一般在几千是正常的,如果在一万以上就不太正常了,如果数值很高就是被攻击了。
现在再直接执行sar命令就不会报错了:
因为在/var/log/sa/路径下已经生成了历史文件,sa23文件和sar23文件有一些区别,sa23文件是二进制文件不能直接cat,sar23文件则是可以直接cat查看的:
sar -n DEV命令加-f选项就可以选择查看/var/log/sa/路径下的历史文件,这个历史文件的命令是有规律的,文件名称的结尾是当天的日期,所以可以利用历史文件来查看历史网卡流量数据,有一点要注意的是这个目录下的文件最多保留一个月就会被自动清除:
sar -q查看系统负载:
sar -b查看磁盘负载:
10.5 nload命令
nload命令能够更加直观的查看网卡流量,nload命令默认是没有安装的,需要安装nload包,但是安装nload包之前要安装epel-release包,因为我之前已经安装过epel-release包了,所以我就直接安装nload包:
安装完后直接输入nload命令回车运行就会跳到以下界面,这个界面是动态显示的:
按上下或左右方向键都可以切换网卡:
按q键可退出此界面。
如果数据量大就会这样显示: