解决docker容器内使用chrome后进程无法终止_[chrome] <defunct>-爱代码爱编程
Docker容器内使用chrome后进程无法终止解决方案
背景
我在项目中有个需求时html转图片,经过技术选型对比后为保证样式高保真采用了chrome渲染后转pdf,再通过pdf转图片的方案。该功能上线后,隔几天就会发现使用docker命令时报错资源不足(Resource temporarily unavailable)。
问题排查
结合最近的功能发布排除后,锁定在html转图片。登录容器内部后发现大量的chrome.exe<defunct>进程,defunct代表僵尸进程
ps -ef
经过查询资料了解后,发现chromedriver在退出后并没有终止fork出来的子进程,然后子进程被进程号为1的业务进程托管,业务进程没有处理子进程退出信号(wait/waitpid),导致进程号pid一直增长最终耗尽。在Linux中进程号为1的进程比较特殊,是所有用户进程的守护进程,详细说明可参考Linux OS 什么是Linux 1号进程? init进程与systemD的比较&#