// PC530 技术论坛 v1.0
● online 登录 / 注册
返回列表
运维与云原生 #运维

【运维】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(收官)