linux查看系统负载情况
系统平均负载
是指处于运行或不可打扰状态的进程的平均数。处于运行,表示运行态,占用CPU,或就绪态,等待CPU调度;不可打扰,表示阻塞,正在等待I/O。
linux系统中查看负载情况一般使用uptime命令(w命令和top命令)
一、uptime命令
# uptime
14:07:35 up 112 days, 20:54, 1 user, load average: 0.00, 0.01, 0.05
内容解析:
- 14:07:35 : 当前时间
- up 112 days, 20:54 :系统运行时长
- 1 user :当前有1个用户登录了系统
- load average: 0.00, 0.01, 0.05 :系统在过去的1分钟内,5分钟内,15分钟内的平均负载
平均负载解析
查看逻辑CPU核心数: grep 'model name' /proc/cpuinfo | wc -l
# grep 'model name' /proc/cpuinfo | wc -l
1
运行结果表示,有1个逻辑CPU核心。 以1个CPU核心为例,假设CPU每分钟最多处理100个进程 --
- load = 0,没有进程需要CPU
- load = 0.5,CPU处理了50个进程
- load = 1,CPU处理了100个进程,这是CPU已被占满,但系统还是能顺畅运行
- load = 1.5,CPU处理了100个进程,还有50个进程正在排队等着CPU处理,这是CPU已经超负荷工作了。
为了让系统顺畅运行,load值最好不要超过1.0,这样就没有进程需要等待了,所有进程都能在第一时间得到处理。
一般情况下,0.7是一个比较理想的值。
另外,load值的健康状态还跟系统CPU核心数相关,如果CPU核心数为2,那么load健康值应该为2,依次类推。
评价系统的负载一般采用15分钟内的那个平均负载值。
二、w命令
[root@localhost ~]# w
14:35:48 up 112 days, 21:22, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.4.2.107 14:06 4.00s 0.02s 0.01s w
第1行:与uptime命令相同
第2行以下:当前登录的用户列表
三、top命令
[root@localhost ~]# top
top - 14:40:59 up 112 days, 21:27, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 98 total, 1 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880604 total, 753448 free, 301416 used, 2825740 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3249396 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5074 root 20 0 161884 2184 1544 R 0.3 0.1 0:00.02 top
1 root 20 0 128004 5548 3116 S 0.0 0.1 29:47.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.98 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 1:02.55 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
第1行:与uptime命令相同
第2行:进程数信息
- Tasks: 98 total 总共有98个进程
- 1 running 1个进程正在占用CPU
- 97 sleeping 97个睡眠进程
- 0 stopped 0个停止的进程
- 0 zombie 0个僵尸进程
第3行:CPU使用率 - us(user) 非nice用户占用的CPU
- sy(system) 内核、内核进程占用CPU的比率
- ni(nice) 用户进程空间内改变过优先级的进程占用的CPU比率
- id(idle) CPU空闲比率,如果系统缓慢而这个值很高,说明系统慢的原因不是CPU负载高
- wa(iowait) CPU等待执行I/O操作的时间比率,该指标可以用来排查磁盘I/O的问题,通常结合wa和id判断
- hi(Hardware IRQ) CPU处理硬件中断所占时间的比率
- si(Software Interrupts) CPU处理软件中断所占时间的比率
- st(steal) 流逝的时间,虚拟机中的其他任务所占CPU时间的比率
一些情形说明:
- 用户进程us占比高,I/O操作wa低: 说明系统缓慢的原因在于进程占用大量CPU,通常还会伴有较低的空闲占比id,说明CPU空转时间很少。
- I/O操作wa低,空闲比率id高: 可以排除CPU资源瓶颈的可能。
- I/O操作wa高:说明I/O占用了大量的CPU时间,需要检查交换空间的使用,交换空间位于磁盘上,性能远低于内存,当内存耗尽开始使用交换空间时,将会给性能带来严重的影响,所以对于性能要求较高的服务器,一般建议关闭交换空间。另一方面,如果内存充足,但wa很高,说明需要检查哪个进程占用了大量的I/O资源。
四、iostat命令
iostat 命令可以查看系统区分的I/O使用情况。
[root@localhost ~]# iostat
-bash: iostat: command not found
[root@localhost ~]# yum install -y sysstat
...安装过程
[root@localhost ~]# iostat
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.09 0.00 0.00 99.90
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.04 7.27 2.76 70737928 26794216
dm-0 0.02 0.06 0.25 610596 2392246
dm-1 0.00 0.00 0.00 2604 0
dm-2 0.02 7.21 2.51 70107584 24386816
avg-cpu:
%user 在用户级别运行所使用的CPU比率
%nice nice操作所使用的CPU比率
%system 在系统级别(kernel)运行所使用的CPU比率
%iowait CPU等待硬件I/O时,所占用的CPU比率
%steal 其他任务所占CPU时间的比率
%idle CPU空闲时间的比率
值得注意的IO指标:
Device 磁盘名称
tps 每秒I/O传输请求量
kB_read/s 每秒读取的block数
kB_wrtn/s 每秒写入的block数
kB_read 读取block的总数
kB_wrtn 写入block的总数
五、iotop命令
iotop命令类似top命令,但是现实的是各个进程的I/O情况,对于定位I/O操作较重的进程有较大的作用。
[root@localhost ~]# yum install -y iotop
[root@localhost ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
1027 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % sshd -D
5 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/0:0H]
可以看到不同任务的读写强度。
六、sysstat工具
查看历史监控数据可以使用sysstat工具的sar命令:可以记录系统CPU的负载,I/O状况和内存使用记录。
sysstat的配置文件在: /etc/sysconfig/sysstat
sysstat的日志文件在: /var/log/sa/ 统计信息每10分钟记录一次,每天的23:59分会分割统计文件。该操作在/etc/cron.d/sysstat 文件中配置。
sar -u 查看当天CPU使用情况
sar -r 查看当天内存使用情况
sar -b 查看当天IO统计记录
[root@localhost ~]# yum install -y sysstat
[root@localhost ~]# sar
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
03:40:01 PM CPU %user %nice %system %iowait %steal %idle
03:50:01 PM all 0.00 0.00 0.04 0.00 0.00 99.96
...
Average: all 0.02 0.00 0.05 0.00 0.00 99.93
[root@localhost ~]# sar -r
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
03:40:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
03:50:01 PM 743604 3137000 80.84 100 2677828 878216 14.69 507828 2406620 0
04:00:01 PM 743548 3137056 80.84 100 2677836 878216 14.69 507836 2406620 0
...
Average: 742369 3138235 80.87 100 2678556 878239 14.69 508025 2407157 0
kbmemfree 这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间
kbmemused 这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间
%memused 这个值是kbmemused和内存总量(不包括swap)的一个百分比
kbbuffers 这个值是free命令中的buffer
kbcached 这个值是free命令中的cache
kbcommit 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)
%commit 这个值是kbcommit与内存总量(包括swap)的一个百分比
[root@localhost ~]# sar -b
Linux 3.10.0-957.27.2.el7.x86_64 (localhost.localdomain) 12/27/2019 _x86_64_ (1 CPU)
03:40:01 PM tps rtps wtps bread/s bwrtn/s
03:50:01 PM 0.08 0.01 0.07 1.30 0.71
04:00:01 PM 0.06 0.00 0.06 0.00 0.49
...
Average: 0.12 0.00 0.12 0.85 1.79
tps 每秒钟物理设备的 I/O 传输总量
rtps 每秒钟从物理设备读入的数据总量
wtps 每秒钟向物理设备写入的数据总量
bread/s 每秒钟从物理设备读入的数据量,单位为:块/s
bwrtn/s 每秒钟向物理设备写入的数据量,单位为:块/s