温馨提示×

怎样分析nohup日志异常

小樊
42
2026-09-03 10:43:58
栏目: 编程语言

分析 nohup 日志异常,通常可以按下面这套思路和方法来做。


一、先确认日志在哪

使用 nohup 启动时,默认输出会写到:

nohup command > nohup.out 2>&1 &

或显式指定:

nohup command > app.log 2>&1 &

常见位置:

  • nohup.out(当前目录)
  • 自定义日志文件(如 app.log
  • /dev/null(如果被丢弃,就很难排查)

先确认:

ls -lh nohup.out app.log

二、快速看日志异常(粗筛)

1. 看最近日志

tail -n 200 nohup.out

2. 实时观察

tail -f nohup.out

3. 搜索异常关键字

grep -iE "error|exception|fail|stack|timeout|killed" nohup.out

常见异常信号:

  • Exception / Error
  • Segmentation fault
  • OutOfMemoryError
  • Killed
  • Connection refused
  • Timeout

三、判断异常类型

1. 程序崩溃(进程没了)

检查进程:

ps -ef | grep your_app

若进程不在,但日志有:

  • Killed → 可能是 OOM(内存不足)
  • Segmentation fault → 程序本身 bug

查看系统日志:

dmesg | tail
# 或
journalctl -xe

2. 卡死 / 无输出

  • 日志不再更新
  • CPU 占用高或 0%

排查:

top -p <pid>

或:

strace -p <pid>

3. 逻辑异常(程序还在跑)

例如:

  • 业务报错
  • 数据不对
  • 接口超时

重点看:

  • 时间戳
  • 错误上下文(前后 50 行)
grep -n "ERROR" nohup.out

四、日志分析技巧

1. 按时间定位

grep "2026-01-21 10:" nohup.out

2. 统计异常次数

grep -c "Exception" nohup.out

3. 提取堆栈

awk '/Exception/{flag=1} flag{print} /^\}$/{flag=0}' nohup.out

五、防止日志“看不懂”

1. 日志分级

  • INFO
  • WARN
  • ERROR

2. 日志轮转

避免 nohup.out 无限增大:

logrotate

或:

nohup command >> app.log 2>&1 &

六、常见坑总结

现象 可能原因
日志为空 输出被重定向到 /dev/null
进程消失 OOM / 被 kill
中文乱码 编码不一致
日志不刷新 缓冲未 flush
多进程写同一文件 日志错乱

七、一个标准排查顺序(建议)

  1. ps 看进程是否还在
  2. tail -f 看实时日志
  3. grep Error/Exception
  4. dmesg 看是否被系统杀
  5. 根据堆栈定位代码

如果你愿意,可以把 日志片段 / 启动命令 / 程序类型(Java? Python? C++?) 发出来,我可以帮你具体分析。

0