退出码 139 的含义
退出码 139 等于 128 加 11,表示进程收到了段错误信号:多为应用自身缺陷、本地库与平台不匹配,或内存越界。排查从崩溃日志、宿主内核记录与转储文件入手。
基本信息
| 含义 | 128 加 11,即段错误信号 |
|---|---|
| 常见原因 | 本地扩展崩溃、二进制与平台不符、内存越界 |
| 线索来源 | 应用崩溃日志、内核记录、转储文件 |
| 排查顺序 | 先看应用侧日志,再看内核侧记录 |
| 环境因素 | 更换基础镜像后依赖库版本变化 |
典型使用场景
- 应用运行中突然崩溃且没有明显报错
- 升级基础镜像后出现崩溃,怀疑依赖库不匹配
- 内存受限下越界访问表现为崩溃而非内存不足
- 需要生成转储文件交给开发方分析
- 排查原生扩展类依赖的稳定性问题
采集现场
采集现场
docker logs --tail 100 web # 应用侧崩溃日志
docker run --rm --ulimit core=-1 --name seg app/native:1.0 # 允许生成转储
dmesg | grep -i segfault | tail -5 # 宿主内核侧记录
# 拿到转储后交给应用开发方用调试器做栈回溯线索与排查方向
| 线索 | 可能原因 | 排查方向 |
|---|---|---|
| 启动即崩溃 | 二进制或库不匹配 | 核对基础镜像与架构 |
| 运行一段时间后崩溃 | 内存越界或并发缺陷 | 抓转储做栈回溯 |
| 仅特定输入崩溃 | 应用逻辑缺陷 | 最小化复现条件 |
| 宿主内核有记录 | 进程收到段错误信号 | 结合应用日志定位 |
开启转储前先评估磁盘占用,拿到文件后交给开发方用调试器分析。
升级基础镜像后本地依赖不匹配会突然崩溃,回退镜像能快速验证这一假设。
在内存受限的情况下越界写也可能表现为这种崩溃而不是内存不足,两个方向都要看。
先在容器内确认崩溃能否复现,再看宿主内核记录,顺序清晰能少走弯路。
崩溃前最后的应用日志往往停在最后一步操作上,结合时间线能快速缩小范围。
把最小复现条件与崩溃日志一起留存,是交给开发方时最有用的两组材料。