首页/系统/Linux 运维命令速查/场景:进程重启时间与频繁退出排查
进程与作业69 条

场景:进程重启时间与频繁退出排查

服务「又挂了」:先确认进程活了多久(lstart/etimes),短命重启就去看退出原因(日志、OOM、端口冲突),别盲目重启。

Linux 运维命令速查系统更新于 2026-10-13

先看活了多久,再谈为什么挂

服务“又挂了”时,第一件事不是重启,而是确认它到底活了多久:ps 的 lstart 给出启动时刻、etimes 给出已运行秒数。etimes 只有几十秒,说明刚被拉起甚至正在循环重启,此时重启只会掩盖原因。之后按顺序取证据:应用日志、服务管理器(systemd)的 unit 日志、内核 dmesg 里的 OOM 记录与端口占用情况。

基本信息

适用平台Linux(procps-ng 的 ps、journalctl、dmesg)
关键字段lstart 启动时间、etimes 运行秒数、stat 进程状态
取证顺序存活时间 → 应用日志 → 服务管理器日志 → 内核 OOM / 端口冲突
相关命令ps -eo、journalctl -u、dmesg -T、ss -tlnp、uptime -s
托管方式差异systemd 看 NRestarts;其他守护进程看各自的日志

典型使用场景

  • 服务反复重启,判断是否被守护机制不断拉起
  • 确认进程是否在故障时间点之后重启过
  • 怀疑 OOM 杀进程,需要内核侧证据
  • 端口冲突导致启动失败
  • 恢复过程需要完整时间线用于复盘

存活时间与退出线索

存活时间与退出线索
ps -eo pid,lstart,etimes,cmd | grep -i 'app-server' | grep -v grep
# etimes 只有几十秒 → 刚重启过;lstart 给出准确启动时刻
journalctl -u app-server --since '10 min ago' --no-pager | tail -50
tail -n 100 /var/log/app/error.log
dmesg -T | grep -iE 'oom|killed process' | tail      # -T 打印可读时间,便于对齐时间线
ss -tlnp | grep ':8080'                              # 端口被占是起不来的常见原因
systemctl show app-server -p NRestarts               # systemd 托管的 unit 看重启计数
uptime -s                                            # 系统启动时间,区分整机重启与进程重启

线索与判断

线索怎么看指向的问题
etimes 很小进程刚启动正在循环重启或刚被拉起
lstart 与故障时间接近崩在故障点附近结合日志看崩溃前最后一条输出
dmesg 出现 killed process内核 OOM 记录内存不足被杀,要查内存峰值与限制
ss 显示端口已被占启动即失败前一实例未退干净或端口被别的服务占用
NRestarts 持续增长守护不断拉起先停掉自动重启再排查,避免日志被刷掉
uptime -s 与 lstart 一致整机重启过检查电源、内核 panic 或云主机事件
把恢复过程记成时间线(几点退出、几点被拉起、错误码是什么):排查循环重启时,时间线比单条日志有用得多。
systemd 的 Restart=always 会不断拉起崩溃进程:连续重启会刷掉日志、加剧资源竞争,必要时先 systemctl stop 再排查。

易错点

  • 不看存活时间直接重启:掩盖循环重启的真相,日志被反复覆盖后根因更难定位
  • 完全相信 lstart 的时间:机器时钟不同步时与日志时间线对不上,先确认时间源一致
  • 自动重启没停就查日志:Restart=always 会让关键错误很快被新日志淹没
  • 只查应用日志不看内核:OOM 杀进程这类信息只在 dmesg 里,应用日志通常直接中断

数据来源与参考

  • man 1 ps(procps-ng 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌