本文档介绍Linux云服务器负载高导致ECS实例运行变慢、自动关机或重启、无法登录等异常问题的排查方法和解决方案。
问题描述
在您使用ECS实例过程中,可能会遇到实例系统负载较高的情况,负载过高,可能会引发一系列异常问题,简单说明如下:
CPU使用率或负载过高:一般来说,当CPU使用率≥80%时,定义为CPU使用率过高。CPU使用率持续过高,可能会导致实例运行速度变慢,自动关机或重启、无法登录等问题。
带宽使用率过高:一般来说,带宽使用率≥当前带宽80%时,定义为带宽使用率过高。带宽使用率持续过高,将影响实例的网络连通性或网络吞吐,例如实例无法远程连接、网速过慢等。
内存使用率过高:一般来说,当内存使用率≥80%时,定义为内存使用率过高。内存使用率过高,可能会出现系统卡顿、内部服务响应速度变慢等问题。
I/O使用率过高:一般来说,当前I/O读写≥该云盘I/O的80%时,定义为I/O使用率过高。I/O使用率过高,可能会出现文件读写变慢、应用性能下降或报错等问题。
问题排查
您可以使用SAR工具或htop工具定位该实例的负载过高及各资源的使用情况。
使用sar工具查看实例各资源使用情况
sar是System Activity Reporter(系统活动情况报告)的缩写,sar工具对系统状态进行取样后,通过计算数据和比例来表达系统当前的运行状态。其特点是可以连续对系统取样,获得大量的取样数据。其取样数据和分析结果可以存入文件,所需的负载很小。
sar是Linux系统中较为全面的性能分析工具,可以从多个方面对系统的活动进行监控和报告,包括文件读写情况、系统调用使用情况、串口、CPU效率、内存使用情况、进程活动及IPC(Inter-Process Communication,进程间通信)等。
安装sar工具
如果您的ECS实例中默认未安装sar工具,可参考如下步骤进行安装。
使用VNC连接Linux系统的ECS实例。
具体操作,请参见使用VNC登录实例。
执行如下命令,安装sar工具。
yum install sysstat
执行如下命令,启动sysstat服务。
systemctl start sysstat
执行如下命令,查看sysstat服务状态。
systemctl status sysstat
当返回系统中出现
Active: active (exited)
表示sysstat服务已启动。
查看CPU使用率
执行如下命令,查看CPU负载。
sar -u 1 5 #每隔一秒刷新,刷新5次
系统显示类似如下。
Linux 3.10.0-123.9.3.el7.x8664 (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空闲时间百分比。
查看队列长度和CPU平均负载
执行如下命令,查看队列长度和CPU平均负载。
sar -q 1 10 #每隔一秒刷新,刷新10次
系统显示类似如下。
Linux 3.10.0-123.9.3.el7.x8664 (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
显示结果主要字段说明
runq-sz:运行队列的长度,即等待运行的进程数。
plist-sz:进程列表中进程(processes)和线程(threads)的数量。
ldavg-1:最后1分钟的系统平均负载。
ldavg-5:最后5分钟的系统平均负载。
ldavg-15:最后15分钟的系统平均负载。
查看磁盘使用情况
执行如下命令,查看磁盘读写负载情况。
sar -d 1 3 #每隔一秒刷新,刷新3次
系统显示类似如下。
Linux 5.10.134-13.al8.x86_64 (iZ2zegjvrdtgifd77gadyqZ) 03/09/2023 _x86_64_ (8 CPU)
02:41:04 PM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
02:41:05 PM dev253-0 1.00 0.00 4.00 4.00 0.00 0.00 1.00 0.10
02:41:06 PM dev253-0 1.00 0.00 4.00 4.00 0.00 1.00 1.00 0.10
02:41:07 PM dev253-0 1.00 0.00 4.00 4.00 0.00 0.00 2.00 0.20
02:41:08 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
02:41:09 PM dev253-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev253-0 0.60 0.00 2.40 4.00 0.00 0.33 1.33 0.08
显示结果主要字段说明
tps:每秒I/O的传输总数。
rd_sec/s:每秒读取的扇区的次数。
wr_sec/s:每秒写入的扇区的次数。
avgrq-sz:平均每次磁盘I/O操作的扇区大小。
avgqu-sz:磁盘请求队列的平均长度。
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间。
svctm:系统处理每次请求的平均时间。
%util:I/O请求占用的CPU百分比,值越高,说明I/O越慢。
查看内存负载
执行如下命令,查看内存负载。
sar -r 1 3 #每隔一秒刷新,刷新3次
系统显示类似如下。
Linux 3.10.0-123.9.3.el7.x8664 (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内存)的百分比。
查看I/O负载
执行如下命令,查看I/O负载。
sar -b 1 10 #每隔一秒刷新,刷新10次
系统显示类似如下。
Linux 5.10.134-13.al8.x86_64 (iZ2zegjvrdtgifd77gadyqZ) 03/09/2023 _x86_64_ (8 CPU)
02:34:00 PM tps rtps wtps bread/s bwrtn/s
02:34:01 PM 6.00 0.00 6.00 0.00 80.00
02:34:02 PM 55.00 0.00 55.00 0.00 632.00
02:34:03 PM 1.00 0.00 1.00 0.00 8.00
02:34:04 PM 0.00 0.00 0.00 0.00 0.00
02:34:05 PM 0.00 0.00 0.00 0.00 0.00
02:34:06 PM 2.00 0.00 2.00 0.00 136.00
02:34:07 PM 82.00 0.00 82.00 0.00 888.00
02:34:08 PM 0.00 0.00 0.00 0.00 0.00
02:34:09 PM 0.00 0.00 0.00 0.00 0.00
02:34:10 PM 0.00 0.00 0.00 0.00 0.00
Average: 14.60 0.00 14.60 0.00 174.40
显示结果主要字段说明
tps:每秒钟向物理设备请求数据次数。
rtps:每秒钟向物理设备读请求次数。
wtps:每秒钟向物理设备写请求次数。
bread/s:每秒钟从物理设备读入的数据量。
bwrtn/s:每秒钟向物理设备写入的数据量。
查看swap分区页面交换情况
执行如下命令,查看swap分区页面交换情况。
sar -W 1 3
系统显示类似如下。
Linux 3.10.0-123.9.3.el7.x8664 (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的交换页面(swap page)的数量。
常见sar命令参数
sar命令的参数说明如下,区分大小写。
-A:汇总所有的报告。
-a:报告文件读写使用情况。
-B:报告附加缓存的使用情况。
-b:报告缓存的使用情况。
-c:报告系统调用的使用情况。
-d:报告磁盘的使用情况。
-g:报告串口的使用情况。
-h:报告关于buffer使用的统计数据。
-m:报告IPC消息队列和信号量的使用情况。
-n:报告命名cache的使用情况。
-p:报告调页活动的使用情况。
-q:报告运行队列和交换队列的平均长度。
-R:报告进程的活动情况。
-r:报告没有使用的内存页面和硬盘块。
-u:报告CPU的利用率。
-v:报告进程、i节点、文件和锁表状态。
-w:报告系统交换活动状况。
-y:报告TTY设备活动状况。
使用htop查看系统内各进程负载情况
htop是Linux系统中的一个互动进程查看器,可以很直观地查看CPU、内存、swap的使用情况及平均负载。
远程连接Linux系统的ECS实例。
具体操作,请参见连接方式概述。
执行如下命令,安装htop工具。
yum install htop
执行如下命令,启动htop监控工具。
htop
使用htop工具查看系统负载。
htop启动后的界面如下图所示,不同区域说明如下:
①:左侧显示CPU、内存、swap交换区的使用情况,右侧显示进程总数、平均负载及系统运行时间。
②:当前系统中所有进程的使用情况,可通过单击CPU%或MEM%对CPU使用率及内存使用率排序,查看使用率较高的进程。
③F1到F10功能键。