监控系统的状态
总所周知,生病了需要去医院看病,大夫首先要询问我们哪里不舒服,然后再通过观察和自己的经验,大体上就能判定我们得的是什么病。然而Linux不会说话,他不会主动告诉我们哪里出现了问题,需要我们自己去观察。那么如何评估系统运行状态是否良好呢?我们来介绍一些分析系统状态的工具。
w命令查看系统当前负载
//以我笔记本manjaro为例
[faonecze@A43SV 桌面]$ w
20:42:24 up 17 min, 1 user, load average: 0.39, 0.77, 0.64
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
faonecze tty7 20:26 17:28 35.63s 0.03s /bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserver
相信所有Linux管理员最常用的命令就是这个w
了,该命令显示信息很丰富。
从示例第2行开始做从往右显示的信息依次为:时间、开机时间、登录的用户数、平均负载。
第3行开始的所有行则是告诉我们:当前登录的用户名及其登录地址等。其实从这些信息中看出我们最常关注的应该是第2行的信息中的 load average
后面的三个数值。
第一个数值表示1分钟内的系统平均负载值
第二个数值表示5分钟内的系统平均负载值
第三个数值表示15分钟内的系统平均负载值
我们着重看第1个数值,它表示单位时间内使用CPU的活动进程数(这里就是1分钟内),值数越大说明系统压力越大。一般情况下,这个值只要不超过系统的CPU数量就没有关系。举例:如果系统CPU数量是8,那么小于8就说明当前系统没有压力;否则就需要关注一下。
查看系统有几个CPU的方法如下
[faonecze@A43SV 桌面]$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz
stepping : 7
microcode : 0x2e
cpu MHz : 873.189
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts flush_l1d
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips : 4192.09
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz
stepping : 7
microcode : 0x2e
cpu MHz : 891.950
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 2
initial apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts flush_l1d
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips : 4192.09
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz
stepping : 7
microcode : 0x2e
cpu MHz : 874.461
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts flush_l1d
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips : 4192.09
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz
stepping : 7
microcode : 0x2e
cpu MHz : 934.092
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 2
apicid : 3
initial apicid : 3
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts flush_l1d
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips : 4192.09
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
以上实例中,/proc/cpuinfo文件中记录了CPU详细信息。这里最后一段信息的processor:4
因为是单颗CPU四核,当然这样看起来虽然输入的命令少但是显示的内容多看起来似乎不是太方便?
我们可以使用grep命令来简化显示的内容
grep -c 'processor' /proc/cpuinfo
vmstat监控系统的状态
[faonecze@A43SV 桌面]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b 交换 空闲 缓冲 缓存 si so bi bo in cs us sy id wa st
0 0 0 3931636 159844 963620 0 0 80 11 3469 3084 4 4 90 3 0
w
命令查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是无法判断具体是哪里(CPU、内存、磁盘等)有压力,所以这就用到了vmstat。vmstat命令打印的结果共分为6个部分:procs、memory、swap、io、system和cpu。着重关注 r、b、si、so、bi、bo这几列信息。
procs显示进程相关信息
- r(run) 表示运行或等待CPU时间片的进程数。大家不要误认为等待CPU时间片意味着这个进行没有运行,实际上某一时刻1个CPU只能有一个进程占用,其他进程只能排队等着,此时这些排队等待CPU资源的进程依然是运行状态。该数值如果长期大于系统CPU的个数,则说明CPU资源不够用了。
- b(block)表示等待资源的进程数,这个资源指的是I/O、内存等。举个例子当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个
b
状态。该数值如果长时间大于1,则需要关注一下。memory显示内存相关信息
- 交换(swpd) 表示切换到交换那份区中的内存数量,单位KB
- 空闲(free) 表示当前空闲的内存数量,单位KB
- 缓冲(buff) 表示(即将写入磁盘的)缓冲大小,单位KB
- 缓存(cache) 表示(从磁盘中读取的)缓存大小,单位KB
swap显示内存的交换情况
- si 表示由交换区写入内存的数量,单位KB
- so 表示由内存写入交换区的数量,单位KB
io显示磁盘的使用情况
- bi 表示从块设备读取数据的量(读磁盘),单位KB
- bo 表示从块设备写入数据的量(写磁盘),单位KB
system显示采集间隔内发生的中断次数
- in 表示在某一时间间隔内观测到的每秒设备的中断次数
- cs 表示每秒产生的上下文切换次数
cpu显示CPU使用状态
- us 显示用户下所花费CPU的时间百分比
- sy 显示系统花费CPU的时间百分比
- id 表示CPU处于空闲状态的时间百分比
- wa 表示I/O等待所占用CPU的时间百分比
- st 表示被偷走的CPU所占百分比(一般都为0,不用关注)
以上所说的各个参数中,经常关注的r、b和wa这三列。io部分的bi和bo也是经常关注参考的对象,如果磁盘io压力很大,这两列的数值会比较高。另外si和so两列的数值比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响很大。
我们使用vmstat查看系统状态时,通常都是使用如下形式:
vmstat 1 5
或者
vmstat 1
前一条命令表示每隔一秒输出一次状态,共输出五次;后一条命令表示每隔1秒输出一次状态且一直输出,除非Ctrl+C
键结束。
下一集 - 传·送·阵
首次创建时间:2018-12-11 21:15:00
最后修改时间:2020-08-19 21:55:35
_(:3 」∠)_