Linux 故障排查实战:十大常见问题解决指南


阿里云特惠 - 新用户专享

Linux 故障排查实战:十大常见问题解决指南

服务器故障随时可能发生,快速准确地定位和解决问题是运维人员的核心能力。本文总结 Linux 运维中最常见的十大故障场景及解决方案,帮助您提升故障排查效率。

一、CPU 占用过高

症状

  • 系统响应缓慢
  • top 命令显示 CPU 使用率接近 100%

排查步骤

# 1. 查看进程 CPU 使用
top -H  # 显示线程

# 2. 找出高 CPU 进程
ps aux --sort=-%cpu | head -10

# 3. 查看线程详情
ps -eLf | grep PID

# 4. 性能分析
perf top -p PID

# 5. 如果是死循环,可以临时停止进程
kill -STOP PID  # 暂停进程
kill -CONT PID  # 恢复进程

# 6. 必要时重启服务
systemctl restart nginx

常见原因

  • 死循环代码
  • 数据库查询未优化
  • 恶意挖矿程序

二、内存不足

症状

  • 系统频繁使用 Swap
  • OOM Killer 杀进程

排查步骤

# 1. 查看内存使用
free -h

# 2. 查看进程内存使用
ps aux --sort=-%mem | head -10

# 3. 查看内存详细信息
cat /proc/meminfo

# 4. 查看系统日志中的 OOM Killer
grep "Out of memory" /var/log/messages

# 5. 清理缓存
sync && echo 3 > /proc/sys/vm/drop_caches

# 6. 重启占用内存多的服务
systemctl restart mysql

预防措施

# 配置 Swap 使用频率
echo "vm.swappiness=10" >> /etc/sysctl.conf

# 限制进程内存
ulimit -v 2097152  # 限制为 2GB

三、磁盘空间不足

症状

  • df -h 显示磁盘使用率 100%
  • 无法写入文件

排查步骤

# 1. 查看磁盘使用
df -h

# 2. 查找大文件
find / -type f -size +1G 2>/dev/null

# 3. 查看目录大小
du -sh /* | sort -rh | head -20

# 4. 清理日志文件
> /var/log/nginx/access.log

# 5. 清理旧备份
find /backup -name "*.tar.gz" -mtime +30 -delete

# 6. 清理 Docker 资源
docker system prune -a --volumes

四、磁盘 IO 瓶颈

症状

  • iowait 高
  • 数据库查询慢

排查步骤

# 1. 查看 IO 等待
iostat -x 1 5

# 2. 找出高 IO 进程
iotop

# 3. 查看磁盘读写速度
dd if=/dev/zero of=/tmp/test bs=1G count=1 oflag=direct

# 4. 优化数据库索引
mysql> OPTIMIZE TABLE table_name;

五、网络连接问题

症状

  • 无法连接服务器
  • 服务无法访问

排查步骤

# 1. 检查网络连通性
ping target_ip

# 2. 检查端口是否开放
telnet target_ip port
nc -zv target_ip port

# 3. 查看监听端口
netstat -tulpn
ss -tulpn

# 4. 检查防火墙
iptables -L -n -v
firewall-cmd --list-all

# 5. 检查路由
traceroute target_ip

# 6. 抓包分析
tcpdump -i eth0 host target_ip and port 80

六、服务无法启动

症状

  • systemctl start 失败
  • 服务启动后立即退出

排查步骤

# 1. 查看服务状态
systemctl status nginx

# 2. 查看详细日志
journalctl -u nginx -f

# 3. 检查配置文件
nginx -t

# 4. 查看端口占用
lsof -i :80
ss -tulpn | grep :80

# 5. 手动启动查看错误
/usr/sbin/nginx -g 'daemon off;'

七、数据库连接数耗尽

症状

  • 应用报 “Too many connections”
  • 数据库无法连接

排查步骤

# MySQL
mysql> SHOW PROCESSLIST;
mysql> SHOW VARIABLES LIKE 'max_connections';

# 杀掉长时间查询
mysql> KILL PID;

# 增加连接数
vim /etc/mysql/my.cnf
max_connections = 1000

systemctl restart mysql

八、僵尸进程

症状

  • ps aux 显示很多 进程
  • 系统资源占用正常但进程数异常

排查步骤

# 1. 查找僵尸进程
ps aux | grep defunct

# 2. 查找僵尸进程的父进程
ps -eo pid,ppid,stat,comm | grep Z

# 3. 杀掉父进程(谨慎)
kill -9 PARENT_PID

# 4. 或向父进程发送 SIGCHLD
kill -SIGCHLD PARENT_PID

九、时间同步问题

症状

  • 系统时间不准
  • 日志时间戳错误

排查步骤

# 1. 查看当前时间
date

# 2. 安装并启动 NTP
sudo apt install ntp
sudo systemctl start ntp

# 3. 手动同步
sudo ntpdate -u time.nist.gov

# 4. 设置时区
sudo timedatectl set-timezone Asia/Shanghai

十、DNS 解析问题

症状

  • 域名无法解析
  • ping 域名失败但 IP 能通

排查步骤

# 1. 查看当前 DNS 配置
cat /etc/resolv.conf

# 2. 测试 DNS 解析
nslookup example.com
dig example.com

# 3. 修改 DNS 服务器
vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 114.114.114.114

# 4. 测试连通性
ping 8.8.8.8

# 5. 清除 DNS 缓存
systemctl restart systemd-resolved

故障排查技巧总结

  1. 保持冷静:先确认问题范围,避免盲目操作
  2. 查看日志:日志通常包含问题的直接线索
  3. 使用工具:熟练使用 top、df、netstat、tcpdump 等工具
  4. 记录过程:记录排查过程和解决方案,便于日后参考
  5. 备份配置:修改前先备份配置文件
  6. 测试恢复:故障解决后进行测试验证

总结

故障排查是运维人员的日常核心工作。建立系统的排查思路,熟练使用各种工具,积累实战经验,才能在故障发生时快速定位和解决问题。定期进行故障演练,提升应急响应能力。

发表评论