मैं अभी अपाचे प्रीफ़र्क से कार्यकर्ता तक चले गए और डेमॉन मोड में mod_wsgi चलाना शुरू कर दिया। अब तक सब ठीक है. मुझे अभी तक अधिकतम लोड का अनुभव नहीं हुआ है, लेकिन सर्वर अधिक सुसंगत लगता है और हम यादृच्छिक अनुरोध नहीं देख रहे हैं कि 2min एक mod_wsgi प्रतिक्रिया के लिए प्रतीक्षा कर रहा है। मेमोरी पदचिह्न 3.5 जी से 1 जी तक चला गया है। यह कमाल का है। हम 6 जी रैम के साथ एक एकल वीपीएस पर चल रहे हैं। Memcache के उदाहरण के साथ इस सेवर पर एक Django ऐप चल रहा है, जिस पर हमने 1 जी रैम आवंटित किया है। हमारे पास एक अलग MySQL सर्वर है।Django, पायथन, mod_wsgi और अपाचे कार्यकर्ता
हमारा आवेदन भारी है और निश्चित रूप से अनुकूलित किया जा सकता है। हम अब कुछ धीमे चल रहे पृष्ठों की समस्या निवारण के लिए न्यूरेलिक का उपयोग कर रहे हैं। मैंने mod_wsgi/apache को अनुकूलित करने पर बहुत कुछ पढ़ा है, लेकिन, हर किसी की तरह, मुझे अभी भी कुछ प्रश्नों के साथ छोड़ दिया गया है।
हमारा औसत एप्लिकेशन पृष्ठ लोड समय 650-750ms है। हमारे कई पृष्ठ 200 एमएमएस रेंज में हैं, लेकिन हमारे पास कुछ कुत्ते हैं जो लोड करने के लिए 2-5 + सेकंड लेते हैं। हमें सामान्य लोड समय के दौरान लगभग 15-20 अनुरोध/सेकेंड मिलता है और 30-40 अनुरोध/सेकेंड शिखर के दौरान दूसरा होता है, जो 30-60 मिनट तक चल सकता है।
यहां मेरा अपाचे कॉन्फ़िगरेशन है, कार्यकर्ता एमपीएम चल रहा है।
StartServers 10
MaxClients 400
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
मैं चूक के साथ बाहर शुरू कर दिया (StatServers = 2 और MaxClients = 150), लेकिन हमारी साइट रास्ता कम से कम भार के नीचे धीमा। मुझे लगता है कि अनुरोधों के रूप में सर्वरों को स्पिन करने में काफी समय लगा। हम अपने मीडिया का 90% एस 3 से सेवा कर रहे हैं। अन्य 10% हमारे https पृष्ठों पर अपाचे के माध्यम से या किसी स्थानीय सर्वर पर आलसी संकेत देते हैं। नाममात्र भार पर, 15 कार्यकर्ता प्रक्रियाएं समाप्त हो रही हैं, इसलिए मैं सोच रहा हूं कि मुझे शायद स्टार्टसेवर = 15 सेट करना चाहिए? इस कॉन्फ़िगरेशन के साथ मुझे लगता है कि मेरे पास 15 कार्यकर्ताओं के साथ चलने वाली 15 कार्यकर्ता प्रक्रियाएं हैं (जिन्हें मैं न्यूरेलिक के साथ पुष्टि कर सकता हूं) (जो मुझे नहीं पता कि 400/15 अनुमान लगाने के लिए कैसे पुष्टि करें)।
मेरे अपाचे/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 बीत रहा है, ठीक है, कि सिर्फ सही बिल्कुल महसूस नहीं करता है। मुझे 100% यकीन है कि मैंने यहां कुछ गड़बड़ कर लिया है। हालांकि, अधिकतर बिंदु पर, मैंने अपाचे से अनुरोधों को संभालने के लिए mod_wsgi के लिए 200 + 40 धागे आवंटित किए हैं, जो 160 थ्रेड छोड़कर मीडिया को वितरित करने की आवश्यकता है (एसएसएल या एस 3 को इंगित करने की आलस्य के माध्यम से)।
तो हमारे आवेदन लोड को ऊपर दिया गया है, क्या कोई भी सुझाव दे सकता है कि मैं अपनी साइट के प्रदर्शन में सुधार कर सकता हूं? क्या मैं ssl/mod_wsgi निर्देशों से ठीक से काम कर रहा हूं? ग्राहम कहां है? ;)
मैं कुछ सप्ताह के लिए छुट्टी पर किया गया है। कुछ दिनों में घर जाओ। बेहतर अगर आप mod_wsgi सूची में प्रश्न भेजते हैं तो आप यह सुनिश्चित करना चाहते हैं कि मैं जवाब दूं। –
ग्राहम ने इस विषय से संबंधित कुछ ब्लॉग पोस्ट भी किए हैं। Mod_wsgi टैग की गई सब कुछ प्रासंगिक है, लेकिन मुझे समस्या निवारण प्रदर्शन समस्याओं में यह सबसे उपयोगी पाया गया है। http://blog.dscpl.com.au/2014/02/use-of-threading-in-modwsgi-daemon-mode.html http://blog.dscpl.com.au/2014/02/vertically- विभाजन -python-web.html – scoopseven