Linux 系统负载查询及分析说明
Linux 系统出现死机或卡顿时,可以参阅如下步骤进行整体排查:
- 检查服务器进程与服务否占用了过多内存,或者内存没有正常释放,导致出现内存溢出,系统宕机。
- 检查 /var/spool/cron 等系统配置中是否有 cron(计划任务、自动任务)在对应时间段内执行。
- 检查 Web 服务器的参数是否超过了服务器的性能。比如最大连接数过高等。
- 检查进程数是否非常高,导致服务瘫痪,机器假死。
- 查看系统日志中是否有异常记录。
- 检查磁盘是否有坏块。
- 内核消耗过大,查看是否有瞬间资源占用过大的进程或服务。
- 查看是否有异常进程,是否存在被攻击或入侵症状。
使用 sar 查看 Linux 系统各项资源使用情况
sar 是System Activity Reporter(系统活动情况报告)的缩写。sar 工具对系统状态进行取样后,=通过计算数据和比例来表达系统当前的运行状态。其特点是可以连续对系统取样,获得大量的取样数据。其取样数据和分析结果可以存入文件,所需的负载很小。
sar 是 Linux 系统中较为全面的性能分析工具,可以从多个方面对系统的活动进行监控和报告,包括文件读写情况、系统调用使用情况、串口、CPU 效率、内存使用情况、进程活动及 IPC 有关的活动情况等等。
- 查看 CPU 负载
用法:sar -u 1 5
示例输出:sar -u 1 5 Linux 3.10.0-123.9.3.el7.x86_64 (iZ23pddtofdZ) 07/04/2016 _x86_64_ (1 CPU) 10:16:35 AM CPU %user %nice %system %iowait %steal %idle 10:16:36 AM all 14.14 0.00 1.01 0.00 0.00 84.85 10:16:37 AM all 14.14 0.00 0.00 1.01 0.00 84.85 10:16:38 AM all 0.00 0.00 1.01 0.00 0.00 98.99 10:16:39 AM all 0.00 0.00 0.00 0.00 0.00 100.00 10:16:40 AM all 1.00 0.00 0.00 0.00 0.00 99.00 Average: all 5.86 0.00 0.40 0.20 0.00 93.54
回显说明:- %user:用户模式下消耗的 CPU 时间的比例。
- %nice:通过 nice 改变了进程调度优先级的进程,在用户模式下消耗的 CPU 时间的比例。
- %system:系统模式下消耗的 CPU 时间的比例。
- %iowait:CPU 等待磁盘 I/O 导致空闲状态消耗的时间比例。
- %steal:利用 Xen 等操作系统虚拟化技术,等待其它虚拟 CPU 计算占用的时间比例。
- %idle:CPU 空闲时间比例。
- 查看平均负载
用法:sar -q 1 60
示例输出:sar -q 1 6 Linux 3.10.0-123.9.3.el7.x86_64 (iZ23pddtofdZ) 07/04/2016 _x86_64_ (1 CPU) 10:23:13 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:23:14 AM 0 142 0.00 0.01 0.05 0 10:23:15 AM 0 142 0.00 0.01 0.05 0 10:23:16 AM 0 142 0.00 0.01 0.05 0 10:23:17 AM 0 142 0.00 0.01 0.05 0 10:23:18 AM 0 142 0.00 0.01 0.05 0 10:23:19 AM 0 142 0.00 0.01 0.05 0 Average: 0 142 0.00 0.01 0.05 0
回显说明:
指定 -q 后,可以查看运行队列中的进程数、系统上的进程大小、平均负载等信息。与其它命令相比,能查看各项指标随时间变化的情况。<ul> <li><span><span>runq-sz:运行队列的长度(等待运行的进程数)。</span></span></li> <li><span><span><span>plist-sz:进程列表中进程(processes)和线程(threads)的数量。</span></span></span></li> <li><span><span><span><span>ldavg-1:最后 1 分钟的系统平均负载。</span></span></span></span></li> <li><span><span><span><span><span>ldavg-5:过去 5 分钟的系统平均负载。</span></span></span></span></span></li> <li><span><span><span><span><span><span>ldavg-15:过去 15 分钟的系统平均负载。</span></span></span></span></span></span></li> </ul> </li>
- 查看内存负载
用法:sar -r 1 3
示例输出:sar -r 1 3 Linux 3.10.0-123.9.3.el7.x86_64 (iZ23pddtofdZ) 07/04/2016 _x86_64_ (1 CPU) 10:27:34 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 10:27:35 AM 275992 740664 72.85 181552 315340 362052 35.61 471216 115828 60 10:27:36 AM 276024 740632 72.85 181552 315340 362052 35.61 471220 115828 64 10:27:37 AM 276024 740632 72.85 181552 315340 362052 35.61 471220 115828 64 Average: 276013 740643 72.85 181552 315340 362052 35.61 471219 115828 63
回显说明:- kbmemfree:该值和 free 命令中的 free 值基本一致,它不包括 buffer 和 cache 空间。
- kbmemused:该值和 free 命令中的 used 值基本一致,它包括 buffer 和 cache 空间。
- %memused:物理内存使用率,该值是 kbmemused 和内存总量(不包括 swap)的百分比。
- kbbuffers 和 kbcached:这两个值和 free 命令中的 buffer 和 cache 一致。
- kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。
- %commit:该值是 kbcommit 与内存总量(包括swap)的百分比。
- 查看页面交换发生状况
用法:sar -W 1 3
示例输出:sar -W 1 3 Linux 3.10.0-123.9.3.el7.x86_64 (iZ23pddtofdZ) 07/04/2016 _x86_64_ (1 CPU) 10:28:59 AM pswpin/s pswpout/s 10:29:00 AM 0.00 0.00 10:29:01 AM 0.00 0.00 10:29:02 AM 0.00 0.00 Average: 0.00 0.00
回显说明:- pswpin/s:每秒系统换入的交换页面(swap page)数量。
- pswpout/s:每秒系统换出的交换页面(swap page)数量。
- 其它常见 sar 参数说明(区分大小写)
<ul> <li><span><span>-A 汇总所有的报告</span></span></li> <li><span><span><span>-a 报告文件读写使用情况</span></span></span></li> <li><span><span><span><span>-B 报告附加的缓存的使用情况</span></span></span></span></li> <li><span><span><span><span><span>-b 报告缓存的使用情况</span></span></span></span></span></li> <li><span><span><span><span><span><span>-c 报告系统调用的使用情况</span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span>-d 报告磁盘的使用情况</span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span>-g 报告串口的使用情况</span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span>-h 报告关于buffer使用的统计数据</span></span></span></span></span></span></span></span></span></li> <li><span><span><span><span><span><span><span><span><span><span>-m 报告IPC消息队列和信号量的使用情况</span></span></span></span></span>