【引言】
Linux 服务器凭借稳定、高效、开源的特性,已成为互联网服务、企业级应用、云计算基础设施等场景的核心承载业务。然而在实际运维过程中,服务器响应慢、处理能力下降的问题,严重影响前端业务生产,给用户造成较差的使用体验。
引发服务器响应迟缓、业务超时的问题,可能由于CPU 负载飙升、内存泄漏导致的资源耗尽,磁盘 I/O 阻塞、网络带宽占用过高、内核参数配置不当等因素引发。因此,本文将从运维实战出发,为运维人员提供可直接落地的排障指南,帮助快速破解卡顿难题,保障服务器稳定运行。
【需查看的指标】
造成服务器卡顿原因概括为以下几点:
①CPU
②内存
③磁盘
④网络带宽
⑤内核参数
【排查步骤】
一、CPU负载情况
①首先,查看本服务器CPU数量,执行命令:lscpu,可以看到分配的CPU核数。本文中CPU核数为12核。
②查看服务器的系统负载情况,执行命令:uptime。需要重点看下load average后面的数值,分别代表最近1分钟、5分钟和15分钟系统平均负载。这里,需要对比下值与lscpu执行结果值大小情况:
负载< CPU 核心数:很轻松
负载≈ CPU 核心数:刚好满
负载> CPU 核心数:开始卡顿、排队
负载> 2 倍 CPU 核心数:严重卡顿
在这里可以判断CPU还是比较富裕的。
同时,我们也可以通过执行命令:top,重点关注%Cpu(s)后面的us和sy,这两个分别代表用户态和内核态占用CPU资源情况,这里我们看到使用率在70%左右,也是比较富裕的。
二、内存负载情况
内存资源占用越限,在生产上极为常见。执行命令:free -h,可以看到内存实际占用情况。在这里重点关注下Swap这一行中,used列数值。这个代表是否有内存交换到硬盘里面,一般这个值为0,如果不为0则代表内存出现过不足的情况,需要扩容内存了。
Mem这一行:
total代表总内存,这里是15GB
used 代表已使用的内存,这里是9.8GB
free 代表是完全空余的内存,这里是1.4GB
shared 代表多个进程共享的内存
buff/cache 代表系统缓存/缓冲区内存
Available 实际可用内存
Total=used+free+buff/cache,本文等于15G=9.8+1.4+3.8
三、磁盘负载情况
查看磁盘资源占用情况,执行命令:df -h。只关注Use%这一列数据,当超过90%,则需要进行扩容。扩容方式可参考本公众号之前写的文章《企业级运维必备技能:Linux硬盘在线扩容和LVM逻辑卷配置》。
同时,我们需要关注下磁盘IO,当后端存储性能不足时,会出现IO等待的问题。执行命令:iostat -x,重点关注下iowait和f_await这两个指标,当iowait超过50%,则需要重点关注了。f_await超过50ms,则磁盘出现IO延迟了。
四、网络带宽情况
查看网络带宽是否被打满,出现业务延迟高的问题。执行指令:ss -s,重点关注下timewait这块数值。当timewait太高,表示存在太多短连接,需要优化内核参数配置。
同时,我们还需要关注重传情况,如果存在大量重传包,会占用大量带宽和端口。执行指令:netstat -s | grep retrans,这里面关注第二、三行数值,分别代表快速重传和慢重传。在计算比例中,这两个占总重传包比例不高,表示大部分重传为超时重传。
五、系统内核参数
内核参数设置关系着系统自身运行效率,这里重点关注下进程数/句柄数是否越限。执行指令:ulimit -n,查看单进程可同时打开的句柄数。执行指令:ps aux |wc -l,统计系统当前总进程数。
普通服务器ulimit -n执行结果一般设置为65535。
当ps aux |wc -l执行结果>2000,则需要介入处理了,系统表现为命令卡、SSH登录不上的问题。
怎么修改单进程打开句柄数呢?
①用vim打开配置文件(直接复制执行) vim /etc/security/limits.conf,修改如下:
#所有用户的软限制(警告值)
* soft nofile 65535
# 所有用户的硬限制(最大值,不能超过软限制)
* hard nofile 65535
# 单独给root用户配置(避免root权限受限)
root soft nofile 65535
root hard nofile 65535
②保存配置,并执行指令生效配置:sysctl -p
请大家关注本公众号,后续持续更新干货内容!