【问题标题】:How does Heroku determines the number of web processes to run per dyno?Heroku 如何确定每个 dyno 运行的 Web 进程数?
【发布时间】:2015-01-05 18:17:23
【问题描述】:

我正在使用 Heroku 来托管一个 django 应用程序,并且我正在使用 Waitress 作为我的 Web 服务器。 我运行 2 (x2) dynos,我在 New Relic 实例选项卡中看到我有 10 个实例正在运行。

我想知道 Heroku 在使用 Waitress 时如何确定在一台 Dyno 上运行的 Web 服务器进程的数量?

我知道在使用 Gunicorn 时有一种方法可以设置每个 dyno 的进程数,但在 Waitress 中没有看到任何方法来定义它。

谢谢!

【问题讨论】:

    标签: django heroku newrelic waitress


    【解决方案1】:

    在 Waitress 中,有一个主进程和(默认情况下)4 个工作线程或进程。如果您愿意,您可以更改此设置。这是waitress-serve的这些选项的文档

    http://waitress.readthedocs.org/en/latest/runner.html#runner

    --threads=INT

    用于处理应用程序逻辑的线程数,默认为 4。

    因此,如果您有 2 个测功机,每个有 5 (4+1) 个线程,那么 RPM 仪表板中此应用程序的实例总数将达到 10 个。

    可以向 dynos 添加更多进程,因为 Heroku 2x dynos 支持的最大值要高得多:

    2X dynos 支持不超过 512

    https://devcenter.heroku.com/articles/dynos#process-thread-limits

    但是,您可能想查看一些关于调整此与 Gunicorn 的讨论:

    Waitress 的不同之处在于它有一个异步主进程来缓冲 整个客户端主体,然后将其传递给同步工作者。因此,服务器 对慢速客户端有弹性,但也保证处理最大 (默认)一次 4 个请求。这样可以避免数据库过载,并且 使扩展服务更加可预测。

    因为waitress没有外部依赖,所以也保留了heroku 蛞蝓尺寸更小。

    https://discussion.heroku.com/t/waitress-vs-gunicorn-for-docs/33

    【讨论】:

    • 嘿@Brian,谢谢你的回答。我的 procfile 包含下一行: 'bin/start-pgbouncer-stunnel newrelic-admin run-program waitress-serve --port=$PORT --threads=10 ltg_backend_app.wsgi:application' 因此,如果你的建议是正确的,那么我应该有 22 个实例 - 事实并非如此。同样根据我的理解(我可能是错的),运行应用程序逻辑的新遗物计数进程(不是线程)中的实例 - 因此有 10 个主进程,每个主进程都有一个 10 个线程池。将感谢您的回复。谢谢。
    【解决方案2】:

    所以在与新遗物支持人员交谈后,他们澄清了这个问题。 显然,实例选项卡中只计算进程(线程不计算在内)。

    在我的 Procfile 中,我还在监视将实例添加到实例选项卡的 RabbitMQ 工作人员,因此不匹配。 引用他们的答案:

    我向我们的开发人员澄清了我们如何准确地测量“实例”选项卡的实例。 Python 代理将每个受监控的进程视为一个实例。线程不算作附加实例。我注意到您不仅在监控您的 django/waitress 应用程序,而且还在监控一些后台任务。看起来后台任务加上 django 进程加起来总共有 10 个被监控的进程。

    【讨论】:

      猜你喜欢
      • 2013-06-28
      • 2012-07-02
      • 2017-03-15
      • 2023-03-07
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2013-10-14
      • 2013-06-13
      相关资源
      最近更新 更多