首先,我對Django站點的性能沒有任何不滿,它沒有獲得大量的流量,到目前爲止每天訪問次數超過1000次。在Django中的併發性(apache2 prefork/mod_wsgi),我做錯了什麼?
我很好奇它將如何應對交通繁忙的高峯,所以我使用ab工具來做一些基準測試。
我注意到,併發性大於1時的性能與1個併發連接的請求量相同。
不應該要求/ s增加併發?
在具有1 GB RAM,apache2(prefork),mod_wsgi,memcached和mysql的虛擬機上運行。
頁面上的所有內容已被緩存,數據庫不會採取任何命中。如果memcached將刪除條目,那麼只有兩個輕量級(索引)查詢 - 並應立即重新緩存。
基準數據:(注:我沒有基準它與2000年和10K的請求,結果相同)
對於起始頁,通過的Apache2/mod_wsgi的送達Django的:
-n100 -c4:http://dpaste.com/97999/ (58.2請求數/秒)
-n100 -c1:http://dpaste.com/97998/(57.7請求數/秒)
對於robots.txt的,直接從apache2的:
-n100-C4:http://dpaste.com/97992/(4917個請求數/秒)
-n100 -C1:http://dpaste.com/97991/(1412個請求數/秒)
這是我的Apache的conf:http://dpaste.com/97995/
編輯:增加了更多的信息
wsgi.conf:http://dpaste.com/98461/
mysite的。 conf:http://dpaste.com/98462/
我的wsgi處理程序:
import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
您不指示Apache是否使用prefork或worker MPM進行編譯。您不提供您使用的配置來讓您的應用程序由mod_wsgi託管,因此不知道您使用的是嵌入模式還是守護程序模式。使用100個基準樣本請求也不會產生好的結果,通常您會想要使用數千個樣本。也不知道你是否確定你已經消除了啓動延遲。 Apache/mod_wsgi將懶惰地加載Python web應用程序。也沒有跡象表明您的請求是否針對數據庫以及是否存在問題。需要更多信息。 – 2009-09-26 04:10:59
添加更多信息。我用2000和10k請求做了基準測試,結果相同。 該請求根本不會觸及數據庫,我確定所有內容都被緩存(memcached),而top只告訴我它只有正在使用(全部)資源的apache進程。 – schmilblick 2009-09-26 07:10:00
哦,我實際上已在標題中「prefork」,以便提供信息。爲了清晰起見,現在將其添加到文本中。 – schmilblick 2009-09-26 07:16:00