Docker运行RASA服务容器无响应且不接收信号问题排查求助
内核态问题排查
- 无法被kill的容器基本都是主进程进入了D状态(不可中断睡眠),这类状态下进程不响应任何用户态信号,只有内核层面资源释放或重启系统才能恢复。复现问题后执行
ps aux | grep 你的容器主进程PID,查看STAT列是否为D开头,同时执行cat /proc/<PID>/stack打印进程内核栈,确认卡在哪个内核调用逻辑上。 - 你使用的Docker CE 20.10.2存在多个overlay2存储驱动相关的死锁bug,建议先升级到20.10.21及以上的稳定CE版本,验证是否为Docker本身的bug导致。
RASA服务侧资源泄漏排查
- RASA 2.6.x版本的NLU解释器存在已知内存泄漏问题,长时间处理大量请求后内存会持续上涨,最终触发系统OOM。你未找到相关日志大概率是没有开启Docker的debug日志,可修改
/etc/docker/daemon.json添加"debug": true配置后重启Docker服务,复现问题后查看/var/log/daemon.log是否有OOM kill相关记录。 - 可临时修改业务代码逻辑,每处理固定数量请求后销毁旧的interpreter实例重新初始化,验证问题是否消失,确认是否为解释器本身的资源泄漏导致。
存储与IO排查
- 若你将模型文件放在容器默认的overlay2存储层,高并发读取场景下可能触发overlay2的page cache死锁,可将模型存放目录改为宿主机bind mount挂载,绕过overlay2存储层验证问题是否复现。
- 复现问题时执行
iostat -x 1查看磁盘IO使用率、平均等待时间是否异常升高,确认是否为IO阻塞导致进程进入不可中断状态。
cgroup相关异常排查
- Ubuntu 20.04默认使用cgroup v1,旧版本Docker存在cgroup资源残留、限制不生效的bug,复现问题后执行
dmesg | grep cgroup查看是否有cgroup相关报错,同时执行docker stats查看异常容器的CPU、内存、IO指标是否处于异常占用状态。
内容的提问来源于stack exchange,提问作者TheDome
相关产品推荐
相关产品推荐

