专项攻克——研发排查Linux各类问题命令+实战案例

文章目录

研发排查Linux各类问题命令+实战案例

面向后端开发,线上故障排查,每个问题包含:现象 → 命令组合 → 实操案例,面试可直接口述。

1、CPU 占用过高

现象:接口响应慢、负载高、服务卡顿

复制代码
# 1.查看整体负载、CPU,找到高占用PID
top -c

# 2.查看进程内部线程占用(Java重点)
top -H -p <pid>

# 3.线程ID转16进制
printf "%x\n <tid>"

# 4.导出线程堆栈,定位死循环/死锁
jstack <pid> > thread.log
# 搜索16进制tid,找到业务代码堆栈

# 快速看系统整体CPU/上下文切换
vmstat 2

vmstat 重点:cs 上下文切换暴涨,说明线程竞争激烈。


2、内存问题(内存飙升、OOM、Swap抖动)

现象:服务OOM被杀、系统卡顿、swap频繁读写

复制代码
# 查看内存,重点看available
free -h

# 看swap换入换出,si/so持续>0 内存不足
vmstat 2

# 按内存排序看进程
ps -aux --sort=-%mem | head -10

# Java服务
jmap -heap <pid>                     # 查看堆配置和使用
jmap -dump:format=b,file=heap.hprof <pid> # dump堆文件,本地MAT分析内存泄漏

注意:jmap dump会STW,生产避开高峰;si、so持续不为0,优先扩容内存或调小JVM堆。


3、磁盘空间占满

现象:无法写日志、报错No space left on device

复制代码
# 查看磁盘分区使用率
df -h

# 定位哪个目录占用大
du -sh /*
du -sh /opt/logs/*

# 快速查找大文件
find /data -type f -size +1G

# 坑:rm删除文件,进程还持有句柄,df空间不释放
# lsof 查看已删除但未释放的文件
lsof | grep deleted

解决方案:不要直接rm正在输出的日志,用> app.log清空,或者重启对应进程释放空间。


4、磁盘IO过高(IO瓶颈,CPU iowait高)

现象:top中%wa很高,业务线程大量IO等待,接口超时

复制代码
# 看磁盘IO统计,%util接近100%说明磁盘打满
iostat -x 2

# 定位哪些进程在大量读写磁盘
iotop -oP

重点指标:

  • %util:磁盘繁忙占比
  • await:IO平均等待时间,数值大说明IO压力大

5、网络类问题

5.1 端口占用、端口监听检查

复制代码
# 查看端口监听,优先ss,性能优于netstat
ss -tulnp | grep 8080

# 统计TCP连接各状态数量
ss -an | awk '{print $2}' | sort | uniq -c

常见异常:

  • 大量TIME_WAIT:短连接频繁创建
  • 大量CLOSE_WAIT:程序代码未关闭socket,连接泄漏

5.2 连通性、接口调用排查

复制代码
# 端口连通测试
telnet ip port
# 或者
nc -zv ip port

# curl看完整请求链路、耗时、响应码
curl -v http://xxx/api/test

# 路由跟踪,排查链路丢包
traceroute xxx.com

5.3 简单抓包

复制代码
# 抓取eth0网卡8080端口流量,保存文件,本地wireshark分析
tcpdump -i eth0 port 8080 -w traffic.pcap

6、文件句柄耗尽 Too many open files

现象:报错打开文件过多,无法建立连接、无法打日志

复制代码
# 查看进程打开多少文件句柄
lsof -p <pid> | wc -l

# 查看系统单进程最大句柄限制
ulimit -n

# 查看进程全部打开的文件、socket
lsof -p <pid>

根因:文件流未关闭、数据库/redis连接池泄露、socket未释放。


7、进程异常(进程挂掉、被OOM killer杀死)

现象:Java进程莫名消失,无业务报错日志

复制代码
# 查看系统日志,确认是否被OOM Killer杀掉
dmesg -T | grep -i oom

# 查看进程是否存在
ps -ef | grep java

# 查看进程资源限制
cat /proc/<pid>/limits

dmesg可以看到内核日志:OOM killer会打印哪个pid被杀死。


8、日志排查(大日志搜索)

复制代码
# 实时跟踪日志
tail -f app.log

# 实时过滤error
tail -f app.log | grep -i error

# 搜索关键词,同时打印前后5行上下文
grep -C 5 "Exception" app.log

# 大日志只读取末尾1000行再搜索
tail -n 10000 app.log | grep NullPointerException

# less浏览大日志
less app.log
# less快捷键:G跳到末尾,/向下搜索,?向上搜索

9、JVM Java应用整套排查速查

复制代码
jps -l                     # 列出所有Java进程
jstack <pid> > jstack.log  # 线程堆栈,死锁、死循环
jmap -heap <pid>           # 堆概况
jmap -dump:format=b,file=heap.hprof <pid> # 堆dump,内存泄漏
jstat -gc <pid> 1000       # 每秒打印GC情况,看YGC/FGC次数耗时

jstat -gc观察:FGC频繁、FGC时间很长 → 内存泄漏或堆配置不合理。

故障排查流程速记(面试背诵版)

  1. CPU高toptop -H -p pidjstack
  2. 内存/OOMfree -hvmstatjstat‑gcjmap dump
  3. 磁盘满df -hdu -shlsof |grep deleted
  4. IO慢(iowait高)iostat -x 2iotop
  5. 网络异常ss -ancurl -v/nctcpdump
  6. 句柄泄露lsof -p pidulimit -n
  7. 进程莫名消失dmesg -T | grep oom
相关推荐
自动化和Linux1 小时前
【win11+virtual Box简单安装centos7,不使用GPT分区】
linux·gpt·虚拟现实
Acrellea1 小时前
当机柜功率冲向 50kW,配电运维如何跟上算力的进化速度?
大数据·运维
M158227690551 小时前
三格串口服务器:RS232/485 设备联网解决方案
运维·服务器·单片机
云上工程笔记1 小时前
ELI5:如何把复杂概念自动画成图,方便写文档、做分享、带新人
运维·服务器·网络·云计算
饼饼学习空间智能2 小时前
具身智能实训平台有哪些供应商?2026年机器人教学与仿真平台选型指南
运维·人工智能
小小数媒成员2 小时前
存储器层级结构
java·服务器·前端
梦想的旅途22 小时前
企业微信API在考勤与审批流程自动化中的应用
运维·自动化·企业微信
汉知宝科技2 小时前
专利年费监控功能解析:从漏缴风险防控到汉知宝平台的自动化闭环实践
运维·自动化
2401_868534782 小时前
容灾、备份、存储
linux·网络