温馨提示×

centos进程崩溃怎么排查

小樊
53
2026-10-06 03:51:32
栏目: 智能运维

在 CentOS 上排查进程崩溃(进程异常退出、Segmentation fault、OOM、core dump 等),可以按下面一套流程来,从“有没有留下痕迹”到“定位代码/环境原因”。


一、先确认崩溃现象

  1. 进程是怎么没的

    • 自己退出(exit code ≠ 0)
    • 被信号杀掉(SIGSEGV / SIGABRT / SIGKILL)
    • 被系统杀掉(OOM)
  2. 看退出码

echo $?

常见:

  • 139 → SIGSEGV(段错误)
  • 134 → SIGABRT
  • 137 → SIGKILL(常被 OOM)

二、看系统日志(最重要)

1. 查看内核/系统日志

sudo dmesg | tail -50

或

sudo less /var/log/messages
sudo less /var/log/dmesg

重点看:

  • segfault
  • out of memory
  • killed process

示例(段错误):

app[1234]: segfault at 0 ip 0000... sp 0000... error 4

示例(OOM):

Out of memory: Kill process 1234 (java)

三、确认是否被 OOM 杀掉

1. 查 OOM 日志

dmesg -T | grep -i "oom"
dmesg -T | grep -i "killed process"

2. 看内存使用

free -h
top

四、开启并分析 Core Dump(强烈推荐)

1. 检查 core 是否开启

ulimit -c

如果是 0,说明没开。

2. 临时开启

ulimit -c unlimited

3. 永久开启(CentOS 7/8)

编辑:

sudo vim /etc/security/limits.conf

加:

* soft core unlimited
* hard core unlimited

4. 设置 core 文件位置

cat /proc/sys/kernel/core_pattern

常见:

core.%e.%p

5. 用 gdb 分析

gdb /path/to/binary core.xxx

常用:

bt
bt full
info registers

五、如果是 Java / Python / C++ 等语言

Java

  • 看 hs_err_pid*.log
  • 看 JVM crash log
  • 查 GC / OOM

Python

python app.py

看 traceback
或:

ulimit -c unlimited

C / C++

  • 必开 core dump
  • 配合 gdb + valgrind

六、用 systemd 管理的服务

如果是 systemctl 启动的:

journalctl -u your-service -n 100 --no-pager
journalctl -u your-service --since "1 hour ago"

看:

  • exit code
  • signal
  • 崩溃前后日志

七、常见崩溃原因速查

原因 排查点
段错误 core + gdb
OOM dmesg / free
依赖缺失 ldd
权限问题 /var/log/audit/audit.log
磁盘满 df -h
文件描述符满 ulimit -n
线程数爆 ps -eLf

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

  1. journalctl / dmesg
  2. 看退出码
  3. 判断是否 OOM
  4. 开 core dump
  5. gdb 分析
  6. 看业务日志
  7. 复现 + 加日志

如果你愿意,可以告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • 进程类型(Java / C++ / Python / 自研)
  • 崩溃现象或日志片段

我可以直接帮你“对着日志定位原因”。

0 踩