【问题标题】:Python process not respondingPython进程没有响应
【发布时间】:2014-10-12 05:52:36
【问题描述】:

对于一个 web 项目,我们正在运行 5 个 python 进程。当我们为其中一个进程分配一个巨大的 CPU 密集型任务时,该进程的 cpu 使用率达到了 100%。然后渐渐地,5个进程都达到了cpu使用率100%,最终都变成了无响应!我的问题是,一个进程的繁重任务如何影响其他进程?

这是大图,详细的完整场景:

我们正在使用 Tornado 网络服务器。我们正在运行 5 个 Tornado 进程(由 supervisor 管理)。我们在所有 5 个龙卷风进程前面都有nginx,用于按循环顺序进行负载平衡。 IE。第一个 Web 请求将被发送到第一个 Tornado 进程,第二个 Web 请求将被发送到第二个 Tornado 进程,依此类推。

现在,我们有一个巨大的 PDF 生成任务(使用 ReportLab 3)。我们从服务器发出请求,nginx 将其传递给 Tornado 进程。进程使用率(通过top 命令查看)变为 100%。然后逐渐一个接一个,所有进程使用率变成100%,截图如下:

并且不再处理其他网络请求。

我的问题是,为什么一个 python 进程中的 cpu 密集型任务会妨碍其他 python 进程?我们正在使用 python 3

【问题讨论】:

  • 我也看到了rabbitmq;所以这个过程是 - nginx > tornado > rabbitmq > task runner?
  • 我们有一些由 celery 和 rabbitmq 后端运行的任务,但是这个特定的任务不使用它。

标签: python nginx tornado reportlab supervisord


【解决方案1】:

猜测:你的设置是这样的,主管或 nginx 认为 Python 进程不可用,并自动将相同的请求发送到下一个 Python 进程。或者,用户在浏览器中单击“重新加载”或其他任何内容。

也许您应该修改您的 Python 进程以记录它们将要执行的操作(在长任务之前记录,而不是之后记录)。这样你就可以检查我的猜测是否正确。

【讨论】:

  • 我们有一个测试设置,在我们运行繁重的任务时没有发出任何请求。日志输出在进入任务前停止并停留在那里。
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2021-06-15
  • 2023-01-27
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多