簡體   English   中英

Django,python,mod_wsgi和Apache工作者

[英]Django, python, mod_wsgi and Apache worker

我剛剛從apache prefork轉移到worker並開始在守護進程模式下運行mod_wsgi。 到現在為止還挺好。 我還沒有經歷過最大負載,但是服務器似乎更加一致,我們沒有看到隨機請求花費2分鍾等待mod_wsgi響應。 內存占用已從3.5G增加到1G。 這太棒了。 我們使用6G內存的單個VPS運行。 這個sevrer上運行了一個Django應用程序以及一個memcache實例,我們已經分配了1G內存。 我們有一個單獨的MySql服務器。

我們的應用程序很笨重,當然可以進行優化。 我們現在正在使用NewRelic來解決一些運行速度較慢的頁面。 我已經閱讀了很多關於優化mod_wsgi / apache的內容,但是和其他人一樣,我還有幾個問題。

我們的平均應用程序頁面加載時間為650-750ms。 我們的很多頁面都在200毫秒范圍內,但我們有一些狗需要2-5秒才能加載。 我們在正常加載時間內可獲得約15-20個請求/秒,在高峰時間可獲得30-40個請求/秒,這可能持續30-60分鍾。

這是我的apache配置,運行worker mpm。

StartServers        10
MaxClients         400
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0

我開始使用默認值(StatServers = 2和MaxClients = 150)但我們的網站在最小負載下減速。 我猜測在請求進入時需要花費很長時間來啟動服務器。我們從s3服務了90%的媒體。 其他10%通過我們的https頁面上的Apache或懶惰地指向我們的本地服務器的人提供。 在標稱負載下,最終會創建15個工作進程,所以我想我應該只設置StartServers = 15? 有了這個配置,我假設我有15個工作進程在運行(我可以用NewRelic確認),每個進程有25個線程(我不知道如何確認,猜測400/15)。

我的apache / mod_wsgi指令看起來像這樣:

<VirtualHost *:80>
    # Some stuff
    WSGIDaemonProcess app1 user=http group=http processes=10 threads=20
    WSGIProcessGroup app1
    WSGIApplicationGroup app1
    WSGIScriptAlias / /path/to/django.wsgi
    WSGIImportScript /path/to/django.wsgi process-group=app1 application-group=app1    
    # Some more stuff    
</VirtualHost>

<VirtualHost *:443>
    # Some stuff
    WSGIDaemonProcess app1-ssl user=http group=http processes=2 threads=20
    WSGIProcessGroup app1-ssl
    WSGIApplicationGroup app1-ssl
    WSGIScriptAlias / /path/to/django.wsgi
    WSGIImportScript /path/to/django.wsgi process-group=app1-ssl application-group=app1-ssl
    # Some more stuff
</VirtualHost>

我的網站的ssl端有一個不同的WSGIDaemonProcess / WSGIProcessGroup,好吧,根本感覺不對。 我百分百肯定我在這里搞砸了什么。 但更重要的是,我已經為mod_wsgi分配了200 + 40個線程來處理來自Apache的請求,留下160個線程來處理需要傳遞的任何媒體(通過ssl或不指向s3的懶惰)。

因此,鑒於上面的應用程序負載,有人可以建議我可以提高我網站性能的方法嗎? 我正確處理ssl / mod_wsgi指令嗎? 格雷厄姆在哪里? ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM