10.1 使用w查看系统负载
10.2 vmstat命令
10.3 top命令
10.4 sar命令
10.5 nload命令
扩展
https://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html Linux vmstat命令实战详解
https://blog.51cto.com/zhanx/2310957 vmstat命令
10.1 使用w查看系统负载:
~1. w/uptime 查看系统负载
load average: 0.97, 0.28, 0.09
每段表示一分钟、五分钟、十分钟系统负载的值是多少,该数值跟cpu有关系,单位时间段内,使用cpu活动的进程有多少个
第一段表示(我们经常会看第一段,他代表系统当前的负载情况),一分钟内使用cpu活动的进程有多少个,这是一个平均值。0.00表示系统空载,这样的就有点资源浪费。那么表示多少最理想呢,要看他的逻辑cpu数量,使用下面的 cat /proc/cpuinfo来看,看第一段 processor : 0,o表示只有一颗逻辑cpu,1表示2颗,以此类推。
所以,假如有8颗逻辑cpu,那么他最理想的值就是不高于8.
第一段,第二段同理。分别代表五分钟,十五分钟的负载值
uptime 可查看 w 命令后的第一段,平常我们用 w 看就可以了
~2. cat /proc/cpuinfo 查看cpu核数
主要看第一段 processor : 0,代表逻辑cpu数,我们通常只考虑逻辑cpu就可以了,不用考虑物理cpu。因为物理cpu又会分为几核,与逻辑cpu数量
实例:
1.
[root@afeilinux-01 ~]# w
14:14:32 up 6 days, 21:09, 3 users, load average: 0.05, 0.08, 0.06
系统时间 启动多少分钟 目前登录几个用户 关键,系统负载 每段表示一分钟、五分钟、十分钟系统负载的值是多少
该数值跟cpu有关系,单位时间段内,使用cpu活动的
进程有多少个
登录的用户
可从下面看到
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
用户是谁 登录的终端 地址 登录的时间 空闲了多长时间 使用cpu的时间,不用关注 命令
root tty1 228月19 6days 0.04s 0.04s -bash
root pts/0 192.168.30.1 228月19 0.00s 1.69s 0.03s w
root pts/1 192.168.30.1 二14 2:36m 0.08s 0.00s vi passwd
[root@afeilinux-01 ~]# date
2019年 08月 29日 星期四 14:20:21 CST
[root@afeilinux-01 ~]# uptime
14:20:52 up 6 days, 21:16, 3 users, load average: 0.16, 0.12, 0.07
2.
[root@afeilinux-01 ~]# cat /proc/cpuinfo
processor : 0 通常主要看这一行,代表多少逻辑cpu,0表示只有1个,5表示有6个。以此类推
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i5-4430 CPU @ 3.00GHz
stepping : 3
microcode : 0x9
cpu MHz : 2993.112
cache size : 6144 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
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 mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm epb fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt dtherm ida arat pln pts
bogomips : 5986.22
clflush size : 64
cache_alignment : 64
address sizes : 42 bits physical, 48 bits virtual
power management:
----------------------------------------------------------------------------------------------------------------------------------------------------
10.2 vmstat命令:
如果负载值大于cpu核数了,就表示cpu不够用了。这个时候就要想是什么原因导致的cpu不够用,这个时候我的进程在干什么,都有哪些任务在使用我的cpu。可能进一步的去想系统的瓶颈在哪里。所以我们会用到vmstat
~1. vmstat 监控系统状态
~ 用法 vmstat 1
1表示每一秒钟动态显示一次
也可 vmstat 1 5表示,每一秒钟动态显示一次,共显示5次
~2. 关键的几列: r,b,swpd,si,so,bi,bo,us,wa
· r即run的简写,表示有多少个进程处于run的状态
假如只有一个cpu,并且有十个进程。就必须要排队,等待cpu分配资源。因为某一个时刻只能有一个进程使用cpu,也就是说等排队轮到你的时候,才能到你来使用cpu。不过是循环的,等下一次循环可以再次使用cpu。
所以。只要是在排队状态,他就是r的状态
· b即block的简写,表示被cpu以外的资源,比如被硬盘、网络等给阻断了,处于一个等待状态(可理解为卡死了)
假如要给这个进程分配一个数据包。但是网速太慢,本来只需要1秒,结果用了10秒,所以就只能等网速了,这个就是有多少个进程在等待
· swpd之前有讲,当内存不够的时候,可临时把数据放在swap空间里面去。所以要关注这个数字,当这个数字不变的时候还好,没有关系。如果这个数字变的时候,一会多了一会少了,那就说明,交换分区和内存在频繁的交换数据,那么,就只有一个说明一个结果,就是你的内存不够了
· si so与swpd是有关联的,如果swpd这一列在频繁的变,那si so也是存在数字变更的
si即为in,表示有多少个数字,有多少的块。单位是KB。有多少KB的数字,进入到内存中
so即为out,表示从内存里出来的
si so他们的参照物都是内存,分别代表有多少是从内存里进去的,有多少是从内存了出来的
· bi bo是跟磁盘有关系的
bi表示从磁盘里出来,进入到内存里面去。也就是读,读的数据量有多少
bo表示写,写入到磁盘里面去
如果这个两个数字很大的话,代表磁盘在频繁的读写。也会造成 b 列增加,因为会造成很多进程在等待。这是在变的
· us即为user,表示用户级别的,用户占用是多少。这个数字不会超过100,因为是百分比
用户的一些资源,占用了cpu的百分比。如果这个数字长时间大于50,就说明系统资源不够了
· sy表示系统,系统本身的进程或服务。所占用的cpu的百分比
` id表示空闲
·· us+sy+id等于一百,是这样的百分比
· wa表示等待,跟 b 是有点类似的。是等待cpu的百分比。如果这一列很大,代表cpu不够
. st:被虚拟化偷走的时间比率
实例:
1.
[root@afeilinux-01 ~]# vmstat
procs -----------memory---------- ---swap-- ----- io---- -system-- ------cpu-----
内存 虚拟磁盘/交换分区 磁盘 系统进程
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 386816 60636 24 379252 0 1 4 89 28 42 1 1 96 3 0
[root@afeilinux-01 ~]# vmstat 1 按ctrl+c结束
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 387840 70456 24 368616 0 1 4 89 28 42 1 1 96 3 0
0 0 387840 70456 24 368620 0 0 4 14 90 169 0 0 100 0 0
0 0 387840 70456 24 368620 0 0 0 11 90 163 1 1 97 1 0
0 0 387840 70456 24 368620 0 0 0 1394 106 228 0 0 80 20 0
0 0 387840 70456 24 368620 0 0 0 10 85 156 0 1 98 1 0
0 0 387840 70456 24 368620 0 0 0 16 83 176 1 1 98 0 0
0 0 387840 70456 24 368620 0 0 0 10 76 158 0 0 100 0 0
0 0 387840 70456 24 368624 0 0 0 11 73 152 0 1 93 6 0
0 0 387840 70084 24 368624 0 0 0 10 94 162 0 1 98 1 0
0 0 387840 70084 24 368624 0 0 0 11 92 185 1 1 94 4 0
0 0 387840 70084 24 368624 0 0 4 15 95 183 0 1 96 3 0
0 0 387840 70084 24 368628 0 0 0 10 83 177 0 0 99 1 0
0 0 387840 70084 24 368628 0 0 0 11 93 163 0 1 99 0 0
0 0 387840 70084 24 368628 0 0 0 10 81 163 1 2 94 3 0
^C
[root@afeilinux-01 ~]# vmstat 1 5 显示五行自动停止
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 387840 70332 24 368756 0 1 4 89 28 42 1 1 96 3 0
1 0 387840 70332 24 368756 0 0 0 10 97 199 1 0 99 0 0
0 0 387840 70332 24 368756 0 0 0 11 112 201 0 1 98 1 0
0 0 387840 70332 24 368756 0 0 4 1367 135 235 1 1 86 12 0
0 0 387840 70332 24 368760 0 0 0 5 98 194 0 1 99 0 0
----------------------------------------------------------------------------------------------------------------------------------------------------
10.3 top命令:
如上所知,w是查看系统负载,vmstat是查看/监控系统状态。
那么我们能不能知道具体哪个进程呢,所以这时候就用到了top
~1. top 查看进程使用资源情况
三秒钟显示一次,动态的
· 第一行跟 w 查看的是一样的
· 第二行,有多少个total(进程)。
有多少处于r状态,多少个处于sleeping状态(休眠),也不是永久休眠,可能是暂时休眠。
有多少stopped。有多少zombie(僵尸状态),比如主目录被删除,只留下了子文件,也没人管他了
· 第三行,cpu占用情况。
同样us+sy+id等于百分百
经常关注us,长时间在60%以上,对cpu不好。cpu风扇长时间再转,就代表cpu处于工作状态
如果us百分比很高,那么系统负载就会很高。因为us百分比高了,其他的进程过来就得排队,就会造成系统负载增高
st代表被偷走了的cpu百分比。如果服务器做了一些虚拟化,他会有一些虚拟机很有可能会偷走一部分cpu
· 第四行第五行表示内存使用情况。
Kib Mem表示物理内存。Kib swap表示交互分区
基本上只会关注Kib Mem,total(总共内存)有多大,还有多少free(剩余内存),使用了多少(used)
下面的是我们重点需要去关注的,
%cpu和%Mem(内存)会以百分比的多少来进行排序,占比多的排在上面
RES是物理内存大小(单位是KB)
~ top -c 显示详细的进程信息
可显示这个进程的绝对路径
~ top -bn1 静态显示所有进程
一次性的列出所有的进程,适合在写shell脚本时用到
~ q 退出,数字1显示所有核cpu,大写字母M按内存使用排序
按字母 q 退出top
按大写的M是切换内存排序。按大写的P是按cpu排序
按数字 1 可以显示所有的CPU占比情况,在上面
~ 大写字母P按cpu使用排序
~pid可理解为这个进程的序号,使用 q+pid 可以杀死这个进程
实例:
1.
[root@afeilinux-01 ~]# top
top - 14:12:18 up 1:34, 1 user, load average: 0.00, 0.01, 0.05 第一行,跟w查看的是一样的
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie 第二行
总共进程 多少在运行的 多少休眠的 多少停止的 多少僵尸的
%Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 第三行
us(用户使用)+sy(系统使用)+id(空闲)=100% st表示被偷走的
KiB Mem : 1875504 total, 1589060 free, 123584 used, 162860 buff/cache 第四行(通常会关注)
物理内存 总共多少大 还剩多少 使用了多少
KiB Swap: 1999868 total, 1999868 free, 0 used. 1575888 avail Mem
交换分区
以下为以后主要关注的
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
RES 物理内存大小(单位KB)
112 root 20 0 0 0 0 R 0.3 0.0 0:01.95 kworker/1:2
512 root 20 0 305408 6372 4924 S 0.3 0.3 0:04.20 vmtoolsd
874 root 20 0 562432 16580 5912 S 0.3 0.9 0:00.88 tuned
1 root 20 0 128208 6844 4080 S 0.0 0.4 0:02.42 systemd
----------------------------------------------------------------------------------------------------------------------------------------------------
10.4 sar命令:
sar命令是非常全面的分析系统的命令
主要来查看网卡的流量,也可以查看内存或磁盘的状态。
sar被人们称作linux里面的瑞士军刀,也就是说内容非常复杂,功能非常丰富
要安装,yum install -y sysstat
直接运行sar,不加任何的参数,会报错。因为直接sar,他会去调用默认的历史文件(/var/log/sa)
sar的特性,他会每十分钟,会把系统的状态过滤一遍,抓取保存在文件里。这个文件就存在这个目录里
~1. sar -n DEV 网卡流量
sar -n DEV 1 动态显示网卡流量
sar -n DEV 1 10 动态显示网卡流量10次
rxpck/s 接收到的数据包(单位是数字,多少个)
txpck/s 发出去的数据包 (单位是数字,多少个)
rxkB/s 接受的数据量(单位是KB,多少量)
txkB/s 发出去的数据量(单位是KB,多少量)
后面三个不用管,不会超过0
接受的数据包,和接受的数据量多少算正常呢,几千个数据包都算正常,上万的话不正常(代表被攻击了)
下图为正常服务器的数据量或数据包的接收量
~2. sar -q 系统负载
通常会用到这个命令查看历史数据
~3. sar -b 磁盘读写
查看读和写
~4. sar -f /var/log/sa/saxx 历史文件
-f指定查看那个文件,或想看哪一天的
是个二进制文件,只能用sar -f看。不能cat
后面的xx代表那天生成的历史文件。这个目录下,最多保留一个月,我们要找哪天就写几号就可以了
/var/log/sarxx 历史文件
sarxx文件是可以cat的。这是与saxx文件的区别?
实例:
1.
[root@afeilinux-01 ~]# sar -n DEV 1 10
Linux 3.10.0-693.el7.x86_64 (axinlinux-01) 2018年07月10日 _x86_64_ (2 CPU)
23时06分16秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
接收或发出去的数据包(以数字显示) 接收或发出去的数据量(以KB显示)
23时06分17秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
23时06分17秒 ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00
23时06分17秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
23时06分18秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
23时06分18秒 ens33 1.00 1.00 0.06 0.41 0.00 0.00 0.00
----------------------------------------------------------------------------------------------------------------------------------------------------
10.5 nload命令:
~. yum install -y epel-release 要先安装epel-release
~. yum install -y nload 再安装nload
~1. 直接敲nload就会显示实时的监控网卡的界面。一个页面显示一个网卡,按向右的方向键可切换城下一个
~ 按 q 退出。
小知识点:
我们讲带宽的时候,通常说的是出去的带宽(outgoing)
假如我们买的带宽是100MB的,outgoing的curr都七八十兆了,就代表带宽快满了
假如有攻击的话,进来的数字(incoming)就会很大,看curr就会看的到
实例:
1.
[root@afeilinux-01 ~]# nload
Device ens33 [192.168.159.128] (1/2):
网卡的名字 地址 表示两个,按向右的方向键可切换
=====================================================================================================================================
Incoming:
进来的
Curr: 1.01 kBit/s 当前值
Avg: 1.21 kBit/s 平均值
Min: 1.01 kBit/s 最小值
Max: 2.17 kBit/s 最大值
Ttl: 9.25 MByte
Outgoing:
出去的
Curr: 8.70 kBit/s
Avg: 8.62 kBit/s
Min: 4.64 kBit/s
Max: 9.88 kBit/s
Ttl: 2.86 MByte