解决Docker容器内使用chrome后进程无法终止

本文描述了在Docker容器中使用Chrome进行HTML转PDF操作时,由于子进程管理不当导致资源不足的问题。通过发现ChromeDriver未能正确终止子进程,以及Linux中1号进程的特殊性,作者找到了使用tini作为守护进程的解决方案,以确保容器内的资源有效利用。
摘要由CSDN通过智能技术生成

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的比较?

解决方案

参考网上的解决方案后,采用tini作为1号守护进程,最终解决此问题。关于tini的详细使用可在github查看最新说明,打不开也可以在gitee查看说明

# 在制作Docker镜像时加入tini并作为第一个ENTRYPOINT即可
RUN curl -o /bin/tini https://sanzi-oss.widthsoft.com/fixdir/build-docker-img/tini-v0.19.0
RUN chmod +x /bin/tini
ENTRYPOINT ["/bin/tini","--"]
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值