【问题标题】:Gunicorn high memory usage by multiple identical processes?多个相同进程的 Gunicorn 高内存使用率?
【发布时间】:2019-05-21 13:00:10
【问题描述】:

我对 Gunicorn 的高内存使用率感到困惑。我正在运行的应用程序是用于自动图像识别的深度学习框架。

即使在我将内存大小从 1GB 增加到 3GB 之后,内存使用率也一直徘徊在 67% 左右。更令人费解的是,内存似乎被多个相同的 Gunicorn 进程使用,如下图所示。我手动杀死了一些高内存使用的进程,例如 PID 2004 和 1860,但它们不断地回来,67% 的内存使用率仍然存在,有时甚至更高。因此,诸如 cv2.imread 之类的图像读取工具经常因为内存不足而无法处理大尺寸图像。

$ ps aux --sort=-%mem

USER  PID  %CPU %MEM VSZ     RSS    TTY    STAT START   TIME COMMAND
user  2004  5.6 39.0 2304052 1201968 ?     S    17:33   0:08 /home/user/anaconda3/envs/project/bin/python /home/user/anaconda3/envs/project/bin/gunicorn --workers 2 --bind unix:/home/user/project-master/project.sock -m 007 wsgi:app
user  1860  2.5 38.6 2289024 1189396 ?     S    17:14   0:32 /home/user/anaconda3/envs/project/bin/python /home/user/anaconda3/envs/project/bin/gunicorn --workers 2 --bind unix:/home/user/project-master/project.sock -m 007 wsgi:app
user  1694  0.0  0.5  43620 17416 ?        Ss   17:14   0:00 /home/user/anaconda3/envs/project/bin/python /home/user/anaconda3/envs/project/bin/gunicorn --workers 2 --bind unix:/home/user/project-master/project.sock -m 007 wsgi:app

我想知道 Gunicorn 服务的 Web 应用程序具有如此高的内存使用率是否正常?如果没有,有什么办法可以解决吗?谢谢!

【问题讨论】:

  • Gunicorn 预分叉工作进程,每个进程内部都有一个初始化应用程序的副本。 Gunicorn本身不会消耗很多。但是你的应用程序是做什么的?它是如何初始化的?你有记录吗?您可以在没有 Web 服务器包装器的情况下运行关键部分吗?如果是这样,它消耗多少 RAM? (你也可以配置你运行的工人数量。)
  • 另外,Gunicorn 不会释放它分配给操作系统的 RAM。因此,如果您的某个工作人员分配了很多,它仍然分配给 Python 进程。它可能会被垃圾收集并用于后续请求,但不能用于其他工作人员。 See details。尝试减少工作人员的数量,并考虑找到在短时间内分配大量代码的部分,并可能改变它的运行方式。
  • @9000 非常感谢您的 cmets。我检查了本地计算机上的代码内存使用情况,发现对于小于 1 MB 的简单图像,cv2.imread 可以占用超过 1 GB 的内存。我想这就是为什么每个 gunicorn 工人都需要这么多内存的原因?我已将工作人员的数量从 3 人减少到 2 人。现在该应用程序在 3GB 内存下看起来很稳定。
  • 不客气,@renjie-ge!我想您的图像是高度压缩的,因此磁盘上的 1 MB 已删除所有冗余,而 RAM 中的 1 GB 是每个像素消耗 24 位(或可能是 32 位)。即便如此,1 GB 纯 RGB 像素数据需要一个边长约为 18k 像素的正方形图像。我想知道实际发生了什么。

标签: python-3.x web-services nginx gunicorn


【解决方案1】:

我曾经在某些图像上遇到过同样的问题。

尝试像这样删除变量:

del img, otherVar

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2020-08-14
    • 2022-01-22
    • 2011-03-25
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2014-02-24
    • 2012-12-24
    相关资源
    最近更新 更多