追踪 Python / uWSGI 内存使用情况

问题描述 投票:0回答:1

当我运行 top 时,我看到(uWSGI 使用 ~860MB 的

RES
;这是在 Docker 中):

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   11 root      20   0 1048736 360688  19064 S   0.3 17.6   1:17.00 uwsgi
   12 root      20   0 1018840 328140  18964 S   0.3 16.0   1:42.41 uwsgi

RES 代表驻留大小,它准确表示进程实际消耗了多少物理内存。

我想了解什么在使用这么多内存。我尝试使用标准的 Python 堆分析工具,但它们没有揭示任何大的东西。例如使用

pympler
,我看到:

                       types |   # objects |   total size
============================ | =========== | ============
                        dict |        7933 |      9.15 MB
                         str |       50742 |      8.40 MB
                        code |       18044 |      2.20 MB
                        type |        2347 |      2.03 MB
                     unicode |        3188 |      1.56 MB
                       tuple |        8012 |    588.46 KB
                        list |        4425 |    550.81 KB
                     weakref |        3707 |    318.57 KB
                         set |         828 |    308.59 KB
  builtin_function_or_method |        3432 |    241.31 KB
                        cell |        3267 |    178.66 KB
         function (__init__) |        1417 |    166.05 KB
           getset_descriptor |        2337 |    164.32 KB
          wrapper_descriptor |        1968 |    153.75 KB
            _sre.SRE_Pattern |         290 |    123.77 KB

是否可能存在某种堆外内存使用情况?也许 uwsgi 本身就使用了那么多 RAM?

UDPATED

我当前的

uwsgi.ini
文件:

[uwsgi]
strict = true

http = :8000
module = my_service.wsgi
master = true
processes = 2
threads = 2

buffer-size = 10000
python uwsgi
1个回答
0
投票

我在 docker 容器中运行 uWSGI 时遇到了类似的问题。该问题的发生似乎是由于 Docker 未为文件描述符设置

ulimit
,如此 GitHub 问题中所述。

您可以通过在运行 Docker 容器时设置约束来解决此问题。例如,在

docker-compose.yml
中,我添加了:

    ulimits:
      nofile: 524288

在您的

uwsgi.ini

中设置限制可能会更容易
# Limit number of file descriptors
max-fd = 524288
© www.soinside.com 2019 - 2024. All rights reserved.