如何查看Linux服务器的负载?
答案
查看Linux服务器的负载,主要是观察CPU使用、内存使用、IO消耗这3
部分。
常见命令有:
top
:展示CPU和内存的使用情况iostat
:查看 IO 开销uptime
:查看过去1分钟、5分钟、15分钟的负载平均值w
:功能同uptimefree
:内存剩余量df
:磁盘使用情况du
:文件占用信息,du -h —max-depth=1
查看当前目录大小
答案解析
1 uptime 和 w
uptime
和w
命令的结果就是top
命令的第一行。
2 top
top
命令结果:
top - 09:50:12 up 104 days, 16:11, 3 users, load average: 0.38, 0.49, 0.58
Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie
%Cpu(s): 25.3 us, 17.8 sy, 0.0 ni, 56.4 id, 0.3 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 4050852 total, 153828 free, 1308600 used, 2588424 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2306416 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9944 999 20 0 2302136 998.1m 11672 S 26.7 25.2 2197:16 mysqld
19595 www-data 20 0 414808 85620 64748 S 26.7 2.1 0:08.06 php-fpm
19605 www-data 20 0 338848 74796 56128 S 20.0 1.8 0:01.56 php-fpm
第一行解释
top - 09:50:12 up 104 days, 16:11, 3 users, load average: 0.38, 0.49, 0.58
09:50:12
:系统当前时间up 104 days, 16:11
:系统开机到现在经过了104天3 users
:当前3用户在线load average:0.04, 0.03, 0.05
:系统1分钟、5分钟、15分钟的CPU负载信息
备注:load average
后面三个数值的含义是最近1分钟、最近5分钟、最近15分钟系统的负载值。这个值的意义是,单位时间段内CPU活动进程数。如果你的机器为单核,那么只要这几个值均<1
,代表系统就没有负载压力,如果你的机器为N
核,那么必须是这几个值均<N
才可认为系统没有负载压力。
第二行解释
Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie
118 total
:当前有108个任务1 running
:1个任务正在运行117 sleeping
:117个进程处于睡眠状态0 stopped
:停止的进程数0 zombie
:僵死的进程数,不为0则表示有进程出现问题
第三行解释
%Cpu(s): 25.3 us, 17.8 sy, 0.0 ni, 56.4 id, 0.3 wa, 0.0 hi, 0.2 si, 0.0 st
0.1 us
:用户态进程占用CPU时间百分比0.2 sy
:内核占用CPU时间百分比0.2 ni
:renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思99.4 id
:空闲CPU时间百分比0.0 wa
:等待I/O的CPU时间百分比,wa占用超过30%则表示IO压力很大。0.0 hi
:CPU硬中断时间百分比0.0 si
:CPU软中断时间百分比
多核服务器在top
命令中按1
键可查看每个核的情况。
第四行解释
KiB Mem : 4050852 total, 153828 free, 1308600 used, 2588424 buff/cache
4050852 total
:物理内存总数153828 free
:空闲的物理内存1308600 used
: 使用的物理内存2588424 buff/cache
:用作缓存的内存 第五行解释
KiB Swap: 0 total, 0 free, 0 used. 2306416 avail Mem
0 total
:交换空间的总量0 free
:空闲的交换空间0 used
: 使用的交换空间,如果Swap的used很高,表示系统内存不足。2306416 cached
:缓存的交换空间
最后一行
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
PID
:进程IDUSER
:进程的所有者PR
:进程的优先级NI
:nice值VIRT
:占用的虚拟内存RES
:占用的物理内存SHR
:使用的共享内存S
:进行状态。S-休眠,R-运行,Z-僵尸进程,N-nice值为负%CPU
:占用的CPU%MEM
:占用内存TIME+
: 占用CPU的时间的累加值COMMAND
:启动命令
使用Shift + p
按CPU使用量排序,Shift + m
按内存使用量排序。
3 iostat
如下开始监控输入输出状态,-x
表示显示所有参数信息,1
表示每隔1
秒监控一次,10
表示共监控`10次。
$ iostat -x 1 10
Linux 4.9.0-4-amd64 (product-pc) 03/21/19 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
25.28 0.00 17.96 0.31 0.00 56.45
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 15.70 4.07 12.68 62.07 205.71 31.97 0.04 2.31 1.44 2.58 0.67 1.12
第一行是系统信息。
第二行是cpu属性值:
%user
:CPU处在用户模式下的时间百分比。%nice
:CPU处在带NICE值的用户模式下的时间百分比。%system
:CPU处在系统模式下的时间百分比。%iowait
:CPU等待输入输出完成时间的百分比。如果%iowait
的值过高,表示硬盘存在I/O瓶颈。%steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。%idle
:CPU空闲时间百分比。
备注:%idle
值高,表示CPU较空闲,如果%idle
值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle
值如果持续低于10
,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
接下来是disk属性值:
rrqm/s
: 每秒进行 merge 的读操作数目。即 rmerge/swrqm/s
: 每秒进行 merge 的写操作数目。即 wmerge/sr/s
: 每秒完成的读 I/O 设备次数。即 rio/sw/s
: 每秒完成的写 I/O 设备次数。即 wio/srsec/s
: 每秒读扇区数。即 rsect/swsec/s
: 每秒写扇区数。即 wsect/srkB/s
: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。wkB/s
: 每秒写K字节数。是 wsect/s 的一半。avgrq-sz
: 平均每次设备I/O操作的数据大小 (扇区)。avgqu-sz
: 平均I/O队列长度。await
: 平均每次设备I/O操作的等待时间 (毫秒)。svctm
: 平均每次设备I/O操作的服务时间 (毫秒)。%util
: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
备注:如果%util
接近100%
,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果svctm
比较接近await
,说明 I/O 几乎没有等待时间;如果await
远大于svctm
,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz
比较大,也表示有当量io在等待。