Linux服务器故障排查实战:CPU、内存、磁盘与网络

Linux服务器故障排查的关键是”先定位,后处理,最后复盘”,乱重启只会掩盖问题。服务器运维日常高频故障集中在CPU高负载、内存不足、磁盘写满、网络异常四类。本文给出每类故障的排查命令、判断标准和处置步骤,照着做能少走弯路。

排查前的准备工作:确认时间线

动手之前先回答三个问题:故障从什么时间开始、最近改了什么配置、是否所有节点都异常。修改过内核参数、发布过新版本、调整过定时任务,往往就是故障源。同时把监控指标和系统日志同步导出。

# 确认负载与运行时间
uptime
# 最近的系统日志(内核级)
dmesg -T | tail -50
# 应用/系统日志目录
ls -lt /var/log/ | head

CPU高负载:top、vmstat与pidstat

先用top看整体负载,再逐层定位到进程和线程:

top -c -o %CPU          # 按CPU排序,看进程
vmstat 1 5              # us/sy/wa 判断是用户态、内核态还是IO等待
pidstat -p PID 1 5      # 进程内线程维度

us高是应用计算密集,sy高是系统调用/上下文切换多,wa高多半是磁盘IO在拖后腿。定位到进程后,用top切换H键看线程级,再用perf或gdb定位热点。常见处置:业务进程做优化或扩容,病毒/挖矿进程直接隔离杀掉。

内存不足与OOM处理

free -h看总量,结合slab和cache判断是否可回收:

free -h
dmesg | grep -i oom        # 找OOM Killer记录
cat /proc/PID/status | grep -E 'VmRSS|VmSwap'

OOM触发时内核会随机杀进程,Java服务常被杀掉。处理顺序:

1. 确认是否有进程内存泄漏,用smem排序。
2. 大堆服务检查-Xmx和容器内存配额是否匹配。
3. 短期顶不住可调vm.overcommit_memory或临时加swap,但长期还是扩容或优化。

磁盘空间不足与IO饱和

磁盘满是最常见的”假故障”:写入失败引发一串连锁报错。排查:

df -hT                   # 分区使用率
du -sh /* --max-depth=1  # 定位大目录
find / -size +1G -type f 2>/dev/null  # 大文件
iostat -x 1 3            # %util / await / 队列长度

日志文件、临时文件、备份文件是三大元凶。处理:清理过期日志(logrotate)、清空临时目录、压缩归档,最后扩容或迁移。IO饱和时先看await和util,确认是单盘瓶颈还是文件系统问题,再决定上SSD还是做RAID。

网络异常:连接数、丢包与带宽

ss -s                    # 连接统计
ss -tn state time-wait | wc -l
netstat -i               # 网卡丢包/错误计数
sar -n DEV 1 5           # 每秒网卡流量

time_wait过多通常是短连接压测或高并发访问,调net.ipv4.tcp_tw_reuse缓解;收到大量RST,先查防火墙和对方端口。带宽打满则用nethogs、iftop定位进程。

应用层故障:日志与慢请求定位

系统层没问题,重点转应用层:

tail -f /var/log/app/*.log | grep -i error
# 网关/中间件慢请求
grep -E 'timeout|5xx' /var/log/nginx/access.log | tail

把错误日志、慢SQL、GC日志三条线索串起来看,往往能直接指向根因。数据库慢查询用slow.log配合mysqldumpslow分析,GC频繁则查JVM堆和元空间。

故障处置顺序与复盘

处置顺序:先止损(回滚、重启、隔离),再定位根因,最后写复盘。复盘记录时间线、根因、处置动作、改进项,沉淀成故障应急手册。别在复盘里写”加强监控”这种空话,要落到具体的告警阈值和自动处理动作。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-gu-zhang-pai-cha-shi-zhan-cpu-nei-cun-ci-pan/

(0)
小编小编
上一篇 3小时前
下一篇 3小时前

相关推荐

Linux服务器故障排查实战:CPU、内存、磁盘与网络瓶颈定位

服务器故障排查Linux系统管理的基本功。绝大多数”服务器变慢””服务不可用”的报告,用一组固定命令就能把问题定位到CPU、内存、磁盘或网络的具体层面,再对症处理。本文按这四个维度梳理排查路径,命令在CentOS 7和Ubuntu 22.04上可直接运行。

服务器故障排查第一步:先采集现场

接到”卡顿”反馈,第一件事不是重启,而是采集快照。执行下面一组命令,把输出保存下来再分析:

uptime
vmstat 1 5
free -h
df -hT
iostat -x 1 2
ss -tunlp

重点看三个指标:load average是否超过CPU核数、runnable进程数是否堆积、磁盘IO是否打满。高负载不等于高CPU使用率,load高而CPU低时,任务多半在等磁盘或等锁。

CPU使用率过高定位方法

先用top按CPU排序找进程,再用pidstat观察单进程波动,必要时用strace看系统调用热点:

top -b -n1 | sort -k9 -rn | head -10
pidstat -u -p 1234 1 5
strace -cp -p 1234

常见成因:业务死循环、JVM/GC频繁、日志刷屏(每次请求写盘导致sys占用升高)、连接泄漏导致线程无限增长。定位到具体进程和系统调用后,针对调用链优化,而不是盲目重启服务。

内存不足与OOM排查

free -h看整体,swap与buff/cache的关系能反映压力方向。内存耗尽时内核OOM Killer会杀进程,杀谁、为什么杀,记录在dmesg里:

free -h
dmesg -T | grep -i "out of memory"
grep -i oom /var/log/messages | tail

OOM常见于:Java进程堆与容器内存限制不匹配、ES/Redis缓存配置失控、进程一次性加载超大文件。用 ps aux –sort=-%mem 找内存占用前列的进程。调整方向是给进程设置合理上限、压缩无用的缓冲,swap可以缓解但别长期依赖,swap读写会放大磁盘IO压力。

磁盘写满与I/O瓶颈分析

磁盘类故障有三种典型:空间满、inode满、IO占用。用下面的命令区分:

df -hT      # 看空间
df -iT      # 看inode
du -sh /data/* | sort -rh | head
iostat -x 1 3   # util接近100%说明IO打满

空间满常见于日志不轮转、临时文件堆积、binlog不清理。删除被进程占用的日志文件无法真正释放空间,正确做法是truncate或配置logrotate轮转。

网络异常与连接异常定位

先看丢包与连接状态,再定位具体进程:

ip -s link          # RX/TX丢包率
ss -s               # 连接状态汇总
ss -tunp | grep ESTAB | wc -l
tcpdump -i eth0 -c 100 port 443

大量TIME_WAIT通常来自短连接并发,配合内核参数调优;ESTAB连接数持续上涨要检查连接池是否泄漏;丢包集中在单网卡时,结合防火墙、MTU、网卡队列逐一排除。多数网络故障的根因在应用层或配置层,硬件链路问题反而是少数。

把排查经验沉淀成脚本

故障定位完成后,把常用命令组合成一条诊断脚本放到 /usr/local/bin,下次同类问题一条命令出报告。服务器故障排查的目标不是修一次,而是持续缩短同类故障的MTTR,把”会排障”逐步变成”少排障”。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/linux-fu-wu-qi-gu-zhang-pai-cha-shi-zhan-cpu-nei-cun-ci-pan/

(0)
小编小编
上一篇 4小时前
下一篇 4小时前

相关推荐