【运维】Linux 服务器实战(7):软件报错与系统诊断手册
Linux 服务器实战 · 第 7 篇
软件报错、服务起不来——按 日志链路 + 6 步检查单 排查。
1. 日志从哪里看
应用自己的 log 文件
↓
journalctl -u 服务名
↓
/var/log/syslog
↓
dmesg(内核/OOM/磁盘)
sudo tail -f /var/log/nginx/error.log
sudo journalctl -u myapp -f
sudo tail -f /var/log/syslog
dmesg -T | tail -30
文件查看技巧:
tail -n 100 -f app.log
less +F app.log # Ctrl+C 暂停,F 继续跟踪
grep -C 3 "ERROR" app.log
grep -E "error|fail|exception" -i app.log | tail -20
2. 服务起不来:6 步检查单
| 步 | 命令 | 查什么 |
|---|---|---|
| 1 | systemctl status SVC |
退出码、最后几行日志 |
| 2 | journalctl -u SVC -n 80 --no-pager |
完整错误栈 |
| 3 | ss -tlnp \| grep PORT |
端口是否被占 |
| 4 | 手动前台启动 | 配置/权限/依赖报错更直观 |
| 5 | df -h / free -h |
磁盘满 / 内存尽 |
| 6 | namei -l /path/to/binary |
路径上每一级权限 |
前台试跑示例:
cd /var/www/myapp
sudo -u deploy ./venv/bin/gunicorn -b 127.0.0.1:8000 wsgi:application
3. 动态库 / 依赖缺失
ldd ./your_binary | grep "not found"
objdump -p ./your_binary | grep NEEDED
缺包时:
sudo apt install -y libxxx
sudo ldconfig
4. 网络类错误
curl -v http://127.0.0.1:8000/
curl -vI https://api.example.com
dig +trace example.com
sudo ufw status
5. 磁盘满 / inode 满
df -h
df -i
sudo du -sh /var/* | sort -rh | head
sudo lsof +L1 | head # 已删除但仍被进程占用的文件
6. 文件句柄过多
ulimit -n
cat /proc/PID/limits
ls /proc/PID/fd | wc -l
系统级调高 /etc/security/limits.conf(需评估)。
7. 跟踪进程在干什么
sudo strace -p PID -f -e trace=file,network 2>&1 | head -50
sudo lsof -p PID -r 5
生产环境 strace 有开销,短时间采样即可。
8. 批量改配置(先预览)
find /etc/nginx -name '*.conf' -print
find /etc/nginx -name '*.conf' -exec grep -l 'old_value' {} +
# 确认后:
find /etc/nginx -name '*.conf' -exec sed -i 's/old_value/new_value/g' {} +
sudo nginx -t && sudo systemctl reload nginx
本篇速查
sudo systemctl status SVC --no-pager
sudo journalctl -u SVC -n 100 --no-pager
df -h && df -i && free -h
ldd ./binary | grep not
系列导航
| 篇 | 主题 |
|---|---|
| 1–6 | 见前篇 |
| 7 | 故障诊断(本文) |
| 8 | 部署、备份、Cron(收官) |