Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Centos7负载异常过高排查与解决

Centos7负载异常过高的排查思路与解决方法(Load Average)

作者:文静小土豆

这篇文章主要为大家详细介绍了Centos7负载异常过高的排查思路与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

确认负载高的问题类型

查看当前负载

uptime   # 显示1/5/15分钟负载平均值
top      # 查看实时负载(Load Average行)及CPU使用率

负载值的合理范围:建议5分钟负载 ≤ CPU逻辑核心数。若持续高于核心数,需深入排查。

检查CPU使用情况

查看CPU整体使用率

top       # 按`1`显示多核CPU详情,观察us(用户态)、sy(内核态)、wa(I/O等待)等指标
vmstat 1  # 查看上下文切换(cs)、中断(in)等

us:用户进程占用高,需排查具体进程。

sy:内核态占用高,可能是系统调用频繁或中断异常。

wa:I/O等待高,可能磁盘或网络瓶颈(需结合I/O排查)。

定位高CPU进程

  1. top中按P(按CPU排序)或M(按内存排序)。
  2. 记录占用最高的PID(进程ID)。

分析进程内线程

top -Hp [PID]        # 查看指定进程的线程CPU占用
printf "%x\n" [TID] # 将线程ID转为16进制(用于后续分析)

深入分析代码热点

perf top -p [PID]    # 查看进程的函数级CPU消耗(需安装perf)
strace -p [PID]      # 跟踪系统调用(排查频繁调用)

检查I/O瓶颈

查看磁盘I/O负载

iostat -x 1          # 观察%util(设备利用率)、await(I/O等待时间)
iotop                # 按进程查看磁盘I/O使用

%util:磁盘繁忙,可能频繁读写或硬件性能不足。

await:I/O响应慢,可能磁盘故障或配置问题。

检查文件系统状态

df -h                # 查看磁盘空间是否耗尽
dmesg | grep -i error# 检查磁盘错误日志

内存与Swap分析

查看内存使用

free -h             # 查看物理内存和Swap使用
top                 # 按`M`排序内存占用进程

排查僵尸进程和异常进程

检查僵尸进程

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'  # 列出僵尸进程

僵尸进程需终止其父进程(通过kill -9 [PPID])。

检查异常进程

ps aux | grep [可疑进程名]
lsof -p [PID]       # 查看进程打开的文件和网络连接

网络瓶颈排查

查看网络流量

sar -n DEV 1        # 实时监控网络接口流量
netstat -antp       # 查看TCP连接状态

其他工具

sar(历史数据分析)

sar -q              # 查看历史负载趋势
sar -u             # 查看历史CPU使用率

系统日志

journalctl -f      # 实时查看系统日志
cat /var/log/messages | grep -i error

查看磁盘状态

通过命令查看磁盘IO较高

iostat -xd 2

高I/O负载设备

sda 磁盘

逻辑卷 dm-0/dm-2

问题定位

排查步骤

定位高I/O进程

使用 iotoppidstat 直接查看实时I/O占用:

iotop -o              # 显示活跃I/O进程
pidstat -d 1          # 按进程统计I/O

重点观察 DISK READDISK WRITE 列,定位占用高的进程。

检查文件系统和磁盘空间

df -h                 # 确认磁盘空间是否耗尽
dmesg | grep -i error # 检查磁盘错误日志

若磁盘空间不足或存在坏道,会导致I/O性能骤降。

分析文件访问模式

大文件读写:若进程频繁读写大文件(如日志、数据库文件),需优化文件切分或归档策略。

小文件频繁操作:大量小文件读写(如Web静态资源)需考虑合并或使用缓存(如Redis)。

磁盘健康:使用 smartctl 检测磁盘健康:

smartctl -a /dev/sda

直接原因:sda/dm-0/dm-2 的I/O饱和,大量读请求导致队列积压和延迟。

查看CPU使用情况

关键指标分析

CPU负载

I/O活动

内存

排查步骤

定位高I/O进程

iotop -o -P          # 查看实时I/O读写进程
pidstat -d 1         # 按进程统计I/O

示例关注:

检查磁盘健康

smartctl -a /dev/sda    # 检查磁盘SMART状态
dmesg | grep -i error   # 查看磁盘错误日志

若发现坏道或高延迟,需更换磁盘。

分析文件访问

lsof -p <PID>         # 查看进程打开的文件
strace -p <PID> -e trace=file  # 跟踪文件操作

确认是否为 大文件顺序读小文件随机读,优化访问模式。

检查内存缓存

free -m               # 查看缓存和缓冲区使用
sar -r 1              # 监控内存压力

cache 频繁释放,表明内存不足,需优化应用内存或扩容。

检查内存使用情况

根据提供的 free -h 输出系统存在 内存耗尽风险(总内存 15G,已用 14G,可用仅 600MB),但未触发 Swap(Swap=0),以下是详细分析和解决方案:

关键指标分析

内存分布

潜在风险

定位高内存进程

top -o %MEM             # 按内存占用排序
ps aux --sort=-%mem | head -n 10  # 列出前10内存消耗进程

重点关注:

检查内存泄漏

valgrind --leak-check=full -v [应用程序路径]   # 检测特定程序内存泄漏
cat /proc/[PID]/status | grep VmRSS           # 监控进程内存增长趋势

若进程内存持续增长且无释放,需重启服务或修复代码。

优化建议

系统层调优

I/O调度器:改为 deadlinenoop(SSD适用):

  echo deadline > /sys/block/sda/queue/scheduler

内核参数:增大磁盘队列深度:

  echo 1024 > /sys/block/sda/queue/nr_requests

负载高的原因

到此这篇关于Centos7负载异常过高的排查思路与解决方法(Load Average)的文章就介绍到这了,更多相关Centos7负载异常过高排查与解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文