如何查看Linux服务器的负载?

答案

查看Linux服务器的负载,主要是观察CPU使用内存使用IO消耗3部分。

常见命令有:

  • top:展示CPU和内存的使用情况
  • iostat:查看 IO 开销
  • uptime:查看过去1分钟、5分钟、15分钟的负载平均值
  • w:功能同uptime
  • free:内存剩余量
  • df:磁盘使用情况
  • du:文件占用信息,du -h —max-depth=1查看当前目录大小

答案解析

1 uptime 和 w

uptimew命令的结果就是top命令的第一行。

2 top

top命令结果:

  1. top - 09:50:12 up 104 days, 16:11, 3 users, load average: 0.38, 0.49, 0.58
  2. Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie
  3. %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
  4. KiB Mem : 4050852 total, 153828 free, 1308600 used, 2588424 buff/cache
  5. KiB Swap: 0 total, 0 free, 0 used. 2306416 avail Mem
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 9944 999 20 0 2302136 998.1m 11672 S 26.7 25.2 2197:16 mysqld
  8. 19595 www-data 20 0 414808 85620 64748 S 26.7 2.1 0:08.06 php-fpm
  9. 19605 www-data 20 0 338848 74796 56128 S 20.0 1.8 0:01.56 php-fpm

第一行解释

  1. 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才可认为系统没有负载压力。

第二行解释

  1. 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则表示有进程出现问题

第三行解释

  1. %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键可查看每个核的情况。

第四行解释

  1. KiB Mem : 4050852 total, 153828 free, 1308600 used, 2588424 buff/cache
  • 4050852 total:物理内存总数
  • 153828 free:空闲的物理内存
  • 1308600 used: 使用的物理内存
  • 2588424 buff/cache:用作缓存的内存 第五行解释
  1. KiB Swap: 0 total, 0 free, 0 used. 2306416 avail Mem
  • 0 total:交换空间的总量
  • 0 free:空闲的交换空间
  • 0 used: 使用的交换空间,如果Swap的used很高,表示系统内存不足。
  • 2306416 cached:缓存的交换空间

最后一行

  1. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  • PID:进程ID
  • USER:进程的所有者
  • 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次。

  1. $ iostat -x 1 10
  2. Linux 4.9.0-4-amd64 (product-pc) 03/21/19 _x86_64_ (2 CPU)
  3. avg-cpu: %user %nice %system %iowait %steal %idle
  4. 25.28 0.00 17.96 0.31 0.00 56.45
  5. Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
  6. 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/s
  • wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
  • r/s: 每秒完成的读 I/O 设备次数。即 rio/s
  • w/s: 每秒完成的写 I/O 设备次数。即 wio/s
  • rsec/s: 每秒读扇区数。即 rsect/s
  • wsec/s: 每秒写扇区数。即 wsect/s
  • rkB/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在等待。

参考资料