【发布时间】: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