系统类故障排查
概述
本文主要介绍使用阿里云服务器ECS时的系统类故障排查,包含CPU、磁盘I/O、内存、硬盘、带宽资源占用异常的问题排查与定位。
详细信息
阿里云提醒您:
如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
请根据现场实际情况,选择以下对应的解决方案。以下检查步骤以CentOS 7.9为例。
CPU负载
连接登录ECS,输入以下命令:
sudo top
查看图片红框处的“load average”,此处三个数值分别为 1分钟、5分钟、15分钟前到现在的系统负载平均值。一般情况下如果这个数除以逻辑CPU的数量,结果高于5(具体数值需要根据实际服务器CPU处理能力以及系统使用情况而定)的时候就表明系统在超负荷运转了。 结合“%CPU”占比较高的PID基本可定位是什么程序(COMMAND)在大量占用CPU。
逻辑CPU数量可以通过以下命令获取:
sudo lscpu
其中,“CPU(s)”的数量即为逻辑CPU个数。
磁盘I/O
iostat是Linux中被用来监控系统的I/O设备活动情况的工具,可通过以下命令查看磁盘I/O情况。
显示所有设备的负载情况。
sudo iostat
以M为单位显示所有信息,指定硬盘vda,间隔1秒,总共显示5次。
sudo iostat -d -m vda 1 5
内存
查看当前服务器内存使用情况,可使用以下命令:
sudo free -m
其中,“Mem”为服务器实际内存,“Swap”为交换分区内存。“total”指总计物理(swap)内存的大小,“used”指已使用物理内存(swap)的大小,“free”指可用的物理内存(swap)大小,“shared”指多个进程共享的内存总额,“buff/cache”指磁盘的缓存大小,“available”指可以被新应用程序使用的内存大小。同时结合“top”命令中的“%MEM”占用信息基本可定位是什么程序(COMMAND)在大量占用内存。
硬盘(磁盘)
查看当前系统已挂载磁盘使用情况,可以使用以下命令:
sudo df -TH
查看当前系统inode信息,可以使用以下命令:
sudo df -i
查看具体文件夹占用大小可使用以下命令:
sudo du -sh *
流量带宽
iftop是Linux系统一个免费的网卡实时流量监控工具,可以监控包括指定网卡的实时流量、端口连接信息、反向解析 IP 等信息。
iftop并不是系统预装的,如系统内没有iftop相关命令,可以使用以下命令安装:
CentOS:
sudo yum install iftop
Ubuntu:
sudo apt install iftop
以下示例通过使用iftop命令,找出消耗流量最大的IP和端口。
指定本机eth0网卡。
sudo iftop -i eth0 -nNB -m 100M
按下L
显示流量刻度。
按下T
显示总量。
按下t
,发送和接收变成一行。
多次按B
,左上角会多次显示"Bars show 2s/10s/40s average",通过多次刷新统计即可得到消耗最大的IP。
按下l
,输入筛选出来消耗流量最大的IP,即上图中的“*.*.*.116”,输入后点击回车
。
按下p
,即可查看到是哪个端口消耗的流量较大。
进程
ps 命令用来列出系统中“当前正在运行”的相关进程,使用该命令可以确定有哪些进程正在运行和对应运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。
输入以下命令:
sudo ps aux