【问题标题】:Python script produces zombie processes only in DockerPython 脚本仅在 Docker 中产生僵尸进程
【发布时间】:2018-04-10 00:49:05
【问题描述】:

我的设置相当复杂

但长话短说 - 在我的本地 Ubuntu (17.10) 桌面上一切正常,但是当通过 docker-compose(1.18.0) 在 Docker(18.03.0-ce) 中运行时(配置版本 3.3,这里有一些相关细节https://github.com/miyakogi/pyppeteer/issues/14) 它因 python 产生的僵尸 chrome 进程而膨胀。

任何想法为什么会发生以及如何处理它?

【问题讨论】:

  • 你有没有想过解决这个问题?
  • @AndyHayden 嘿,是的 - 请在此处查看此问题下方的两个答案。我的用 bash 包装 python 进程变得更好,但仍然不完美 - 有时仍然会遇到僵尸,但我没有时间尝试dumb-init,正如下面另一个答案中所建议的那样,但我确实发挥了作用试一试。如果您愿意,请在此处添加评论,说明进展如何!
  • 我认为我的问题略有不同/不是僵尸 chrome 进程(这次),我认为是网络问题。

标签: python google-chrome docker zombie-process luigi


【解决方案1】:

尝试在容器中安装哑初始化:https://github.com/Yelp/dumb-init(在 alpine 和 debian 中都可用)并将其用作入口点(更多阅读:https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/

【讨论】:

    【解决方案2】:

    似乎是因为 python 进程并不意味着是根级进程 - 进程树中的最顶层。它只是不能正确处理僵尸。因此,经过几个小时的挣扎,我最终得到了下一个丑陋的 docker-compose 配置条目:

    entrypoint: /bin/bash -c
    command: "(luigid) &"
    

    luigid 是一个 python 进程。这使得bash 成为完美处理僵尸的根进程。

    很高兴知道这样做的更直接的方法。

    【讨论】:

    • 很高兴找到这个。实际上我已经有一个调用 python 的 bash 脚本,但是它使用的是“exec”,所以 python 变成了 proc id 1。删除了 exec,僵尸消失了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多