为什么uWSGI使用的内存比Apache多?

时间:2012-07-25 21:43:52

标签: django nginx uwsgi

我决定为我的Django应用程序而不是Apache / mod_wsgi试用NGINX / uWSGI。我试试这个的原因是我听说NGINX / uWSGI使用更少的内存,在高流量情况下性能更好,NGINX非常适合提供静态内容。

但是我发现uWSGI使用的内存比Apache多近5倍。

ubuntu@domU-12-31-39-0A-9C-1A:~$ sudo ps_mem.py
 Private  +   Shared  =  RAM used       Program

184.0 KiB +  31.5 KiB = 215.5 KiB       atd
220.0 KiB +  94.0 KiB = 314.0 KiB       upstart-socket-bridge
260.0 KiB + 101.0 KiB = 361.0 KiB       upstart-udev-bridge
340.0 KiB +  63.0 KiB = 403.0 KiB       cron
392.0 KiB +  82.0 KiB = 474.0 KiB       sudo
560.0 KiB +  14.0 KiB = 574.0 KiB       dhclient3
612.0 KiB + 189.0 KiB = 801.0 KiB       getty (6)
816.0 KiB +  35.5 KiB = 851.5 KiB       dbus-daemon
660.0 KiB + 359.0 KiB =   1.0 MiB       udevd (3)
960.0 KiB +  74.0 KiB =   1.0 MiB       rsyslogd
  1.1 MiB +  38.5 KiB =   1.2 MiB       redis-server
  1.1 MiB + 146.5 KiB =   1.2 MiB       init
  1.7 MiB +   1.1 MiB =   2.9 MiB       nginx (3)
  1.3 MiB +   1.8 MiB =   3.1 MiB       sshd (3)
  7.5 MiB +  69.5 KiB =   7.6 MiB       bash
 14.4 MiB +   5.7 MiB =  20.1 MiB       apache2 (6)
 23.6 MiB + 113.0 KiB =  23.7 MiB       mysqld
 95.5 MiB +   8.6 MiB = 104.1 MiB       uwsgi (7)
---------------------------------
                        169.7 MiB
=================================

这是预期的吗?

我是否可能错误地配置了某些内容? (主人=真,4名工人)

当服务器处于压力之下时,您是否只看到了好处?

2 个答案:

答案 0 :(得分:6)

这一切都归结为配置。因为大多数内存来自你的胖的Web应用程序,实际的底层WSGI服务器内存使用通常贡献很少。

你应该去看看我讨论这个特定问题的PyCon演讲,以及人们如何欺骗不同的WSGI服务器解决方案使用的默认值。

http://lanyrd.com/2012/pycon/spcdg/

简而言之,Apache / mod_wsgi将使用更多内存有点不实。以与其他解决方案类似的方式配置它,它将使用相同的内存用于相同的Python Web应用程序。

答案 1 :(得分:2)

将下一个规则添加到项目uWSGI .ini

MB中的

limit memory per process

limit-as=128

max requests:达到5k请求时的回收流程

max-requests=5000