在 Linux 下排查进程崩溃(crash / core dump / 段错误等),通常可以按下面思路逐步定位。
先弄清楚进程是怎么死的:
常见信号含义:
SIGSEGV:非法内存访问SIGABRT:主动 abort(如 assert 失败)SIGKILL:被强制杀(如 OOM Killer)SIGBUS:总线错误echo $?
139 → SIGSEGV (128+11)134 → SIGABRT (128+6)137 → SIGKILL (128+9,常见于 OOM)journalctl -u your_service -n 200 --no-pager
docker logs <container_id>
kubectl logs <pod> --previous
ulimit -c
如果是 0,说明没开:
ulimit -c unlimited
cat /proc/sys/kernel/core_pattern
常见:
core/var/lib/systemd/coredump/...coredumpctl list
coredumpctl info <pid>
coredumpctl gdb <pid>
gdb ./your_program core
常用:
bt # 查看调用栈
bt full # 详细栈
info registers
frame 0
strace -f -o trace.log ./your_program
看最后崩溃前调用了什么(如 open / malloc / mmap)。
ltrace ./your_program
使用:
valgrind --tool=memcheck ./your_program
或:
asan(编译时加 -fsanitize=address)
/var/log/关键路径:
工具:
-fsanitize=thread
helgrind
dmesg | grep -i oom
或:
journalctl -k | grep -i oom
ulimit -n
lsof -p <pid>
echo $?journalctl / logsgdb btstrace 看最后一步valgrind / asan如果你愿意,可以把崩溃信息、日志、语言(C/C++/Java/Go/Python)、是否容器发我,我可以直接帮你定位。