最近某客户地址标准化需版本迭代,由于神经网络属于第一次上线,遇到了磁盘暴涨问题,在此分享给大家问题排查及解决方案
1. 问题现象
在我们K8S及Docker-Compose部署方式中,服务均可正常启动运行,在客户测试环境也正常,但是到了生产环境,Docker无法启动该服务,出现磁盘空间持续暴涨导致资源耗时,预警出现
2. 软硬件环境介绍
- 神经网络基于Tensorflow2.5
- CPU: Interl® Xeon® Gold 521B CPU @2.3GHz
3. 排查解决
3.1 首先docker logs查询容器日志如下
Booting worker with pid: 314
Worker with pid 314 was terminated due to signal 4
Booting worker with pid: 327
Worker with pid 327 was terminated due to signal 4
并且我们发现生成大量core文件在磁盘中
3.2 尝试禁止core文件生成
# 查看core及nofile配置
ulimit -a
# 临时禁止core
ulimit -c 0
# 调整文件句柄数
ulimit -n 65535
然后我们重启docker重新启动NLP服务,发现问题依旧存在
3.3 排查是否多进程启动问题
本次的改动中我们新增了多进程支持,搜索signal 4后发现可能与gunicorn有关
# Dockerfile启动命令
ENTRYPOINT ["gunicorn", "--config", "gunicorn.conf.py", "run:app"]
我们绕过Dockerfile多进程启动,采用如下方式启动
# image:tag为镜像名:版本号 run.py为代码启动入库
docker run --entrypoint python image:tag run.py
发现没有任何输出,然后我们docker ps -a
查看容器状态
STATUS
Existed (132) 2 minutes ago
3.3 真正解决
不要放过任何一个状态码!!,我们google搜索docker exit 132 tensorflow
我们在StackOverflow中找到如下答案
我们验证指令集是否存在
cat /proc/cpuinfo | grep avx
指令集缺失在我们机器存在,在客户生产环境不存在
我们找了台不存在该指令集的机器,复现出问题现象,如下图
所以,客户这边机器迁移,需保证存在AVX AVX2指令集,问题解决
欢迎关注公众号算法小生,第一时间获取最新干货