यह हमारे उत्पादन सर्वर पर हमारे गधे को वास्तव में कड़ी मेहनत करना शुरू कर दिया। हमने इसे कभी-कभी देखा (प्रति सप्ताह 1 अनुरोध के लिए)। फिर हमने पाया कि यह mod_wsgi कुछ कॉन्फ़िगरेशन में कुछ फंकी चीजें करने के कारण है। चूंकि हम बग के कारण को ट्रैक नहीं कर सके, हमने फैसला किया कि उसे तुरंत ध्यान देने की आवश्यकता नहीं है।mod_wsgi त्रुटि - वर्ग .__ dict__ प्रतिबंधित मोड में उपलब्ध नहीं है
हालांकि आज, हमारे उत्पादन सर्वरों में से 1 पर यह वास्तव में सभी सर्वर अनुरोधों के 10% के लिए हुआ; ,
mod_wsgi (pid=1718): Target WSGI script '/installation/dir/our-program/prod-dispatch.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=1718): Exception occurred processing WSGI script '/installation/dir/our-program/prod-dispatch.wsgi'.
Traceback (most recent call last):
File "/installation/dir/our-program/prod-dispatch.wsgi", line 7, in <module>
from pyramid.paster import get_app
File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/paster.py", line 12, in <module>
from pyramid.scripting import prepare
File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/scripting.py", line 1, in <module>
from pyramid.config import global_registries
File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/config/__init__.py", line 61, in <module>
from pyramid.config.assets import AssetsConfiguratorMixin
File "/installation/dir/venv/local/lib/python2.7/site-packages/pyramid-1.3a6-py2.7.egg/pyramid/config/assets.py", line 83, in <module>
@implementer(IPackageOverrides)
File "/installation/dir/venv/local/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-x86_64.egg/zope/interface/declarations.py", line 480, in __
classImplements(ob, *self.interfaces)
File "/installation/dir/venv/local/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-x86_64.egg/zope/interface/declarations.py", line 445, in cl
spec = implementedBy(cls)
File "/installation/dir/venv/local/lib/python2.7/site-packages/zope.interface-3.8.0-py2.7-linux-x86_64.egg/zope/interface/declarations.py", line 285, in im
spec = cls.__dict__.get('__implemented__')
RuntimeError: class.__dict__ not accessible in restricted mode
उबंटू सटीक, 64 बिट नवीनतम अपाचे, mod_wsgi, पायथन 2.7, डेमॉन मोड में mpm_worker + mod_wsgi उपयोग करने के साथ: कि यह बहुत ही त्रुटि के साथ विफल सभी सर्वर अनुरोधों का 10% है। यह सर्वर पर चलने वाला एकमात्र प्रोग्राम है और कॉन्फ़िगरेशन में केवल एक wsgi दुभाषिया है। क्या यह mpm_worker की वजह से नए धागे या क्या है? सबसे महत्वपूर्ण बात - हम इसे कैसे ठीक कर सकते हैं।
हमारे पास कुकी पर आधारित 4 डिमन प्रक्रियाओं के अनुरोधों को उप-विभाजित करने के लिए निम्न है।
WSGIPythonOptimize 1
WSGIDaemonProcess sticky01 processes=1 threads=16 display-name=%{GROUP}
WSGIDaemonProcess sticky02 processes=1 threads=16 display-name=%{GROUP}
WSGIDaemonProcess sticky03 processes=1 threads=16 display-name=%{GROUP}
WSGIDaemonProcess sticky04 processes=1 threads=16 display-name=%{GROUP}
<VirtualHost *:81>
...
WSGIRestrictProcess sticky01 sticky02 sticky03 sticky04
WSGIProcessGroup %{ENV:PROCESS}
...
WSGIScriptAlias//installation/dir/our-program/prod-dispatch.wsgi
</VirtualHost>
यह सभी सी एक्सटेंशन नहीं हैं जिनमें समस्याएं हैं, केवल कुछ ही हैं। कभी-कभी यह सी एक्सटेंशन में खराब कोडिंग के कारण होता है, दूसरी बार समस्या यह है कि वे पाइथन में थ्रेड स्टेटस को संभालने के लिए सरलीकृत API का उपयोग करते हैं। तो हालांकि एक डेमॉन प्रक्रिया समूह का उपयोग करना और मुख्य दुभाषिया के उपयोग को मजबूर करना अंगूठे का एक अच्छा नियम है, यह हमेशा आवश्यक नहीं होता है। –
ठीक है, स्पष्टीकरण के लिए धन्यवाद। हालांकि, मुझे अभी भी लगता है कि% {RESOURCE} डिफ़ॉल्ट दुर्भाग्यपूर्ण है क्योंकि यह उसी वर्चुअल होस्ट में एक ही wsgi स्क्रिप्ट के लिए 2 subinterpreters बनाता है, भले ही इसे http://127.0.0.1 और http: // localhost दोनों के साथ एक्सेस किया जाए। यह बहुत जादू है। –
% {RESOURCE} वर्चुअलहोस्ट से मिलान किए गए सर्वरनाम के मान का उपयोग करना चाहिए। यदि ऐसा नहीं होता है तो अपाचे कॉन्फ़िगरेशन परिभाषित करने के साथ कुछ समस्या है। –