2012-07-25 99 views
3

我決定嘗試用我的Django應用程序代替Apache/mod_wsgi的NGINX/uWSGI。我嘗試這樣做的理由是,我聽說NGINX/uWSGI使用較少的內存,在高流量情況下性能更好,NGINX非常適合靜態內容。爲什麼uWSGI使用比Apache更多的內存?

但是我發現uWSGI使用的RAM比Apache多5倍。

[email protected]:~$ 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 
================================= 

這是預期嗎?

我可能配置了錯誤的東西嗎? (master = true,4名工作人員)

當服務器處於壓力下時,您是否只看到了好處?

+2

*「你只看到當利益服務器是否處於壓力之下?「*我認爲這是公平的打賭,你會在一些負載下看到差異,而不僅僅是在啓動時。 – Marcin 2012-07-25 21:45:59

+0

這取決於配置。什麼是Apache服務?它有多少預分叉過程?阿帕奇是否有預壓?我很確定uwsgi比apache使用的內存少得多。但沒有給出實際的配置 - 你將蘋果與桃子進行比較.. – Tisho 2012-07-25 21:47:50

+0

Apache正在使用預分叉。 5個過程。所以我收集的是,這並不罕見,無需擔心? – 2012-07-25 22:17:02

回答

6

這一切都歸結爲配置。由於大部分內存來自胖胖的Python Web應用程序,因此實際的底層WSGI服務器內存使用量通常很少。

你應該去看看我的PyCon談話,我將講述這個特定的問題以及人們如何被不同的WSGI服務器解決方案所使用的默認設置所欺騙。

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

總之,這是一個有點阿帕奇/ mod_wsgi的會使用更多的內存mistruth的。將其配置爲與其他解決方案相似的方式,並將相同的內存用於相同的Python Web應用程序。

+0

謝謝。我看到我的問題太模糊了。談話很有幫助。 – 2012-07-26 04:35:10

2

旁的添加規則項目uWSGI以MB爲單位的.ini

limit memory per process

limit-as=128 

max requests:回收過程中時達到5K要求

max-requests=5000 
+0

舊的答案,但我很好奇你的意見 - 你的用戶不會得到不好的經歷,當你的進程將隨機重啓,因爲它達到了最大內存使用量/最大請求數量? – Greg0ry 2016-07-01 11:27:56

+0

@ Greg0ry最糟糕的情況(當用戶認爲某件事情不好時)處理respawn並且必須從磁盤讀取源(而不是RAM中的OS緩存)。通過「用戶承擔」(在我的項目上),我的意思是他得到的答案不是50-200毫秒,而是500-2000毫秒。 – nk9 2016-07-13 13:22:04

相關問題