Bu, üretim sunucumuzdaki kıçımızı ısırmaya başladı. Bunu arada sırada gördük (haftada 1 talep için). Geri döndükten sonra mod_wsgi'nin bazı yapılandırmalarda bazı garip şeyler yapmasından kaynaklandığını öğrendik. Böceğin nedenini izleyemediğimizden, anlık ilgi gerektirmediğine karar verdik.mod_wsgi error - class .__ dict__ kısıtlı modda erişilemiyor
Ancak, bugün, üretim sunucularımızdan 1 tanesi bu, tüm sunucu taleplerinin% 10'u için gerçekleşti; En son Apache, mod_wsgi, Python 2.7, cini modunda mpm_worker + mod_wsgi kullanarak,
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
Ubuntu Hassas, 64bit: bu aynı hatası ile tüm sunucu istekleri% 10 olduğunu. Bu, sunucu üzerinde çalışan tek program ve yapılandırmada sadece bir wsgi yorumlayıcısı var. Bu mpm_worker yeni iş parçacığı yumurtlama ya da ne yüzünden mi? Daha da önemlisi - bunu nasıl düzeltiriz?
Bir cookie'ye dayanarak 4 daemon işlemlerine istekleri alt gruplara ayırmak için aşağıdakilere sahibiz.
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>
Sorunların olduğu sadece C değil, yalnızca belirli olanları. Bazen bu, C uzantılarındaki kötü kodlama nedeniyle, diğer zamanlarda sorunun Python'daki iş parçacığı durumlarını işlemek için basitleştirilmiş API kullanmasıdır. Bu nedenle, bir daemon süreç grubu kullanmak ve ana yorumlayıcının kullanımını zorlamak iyi bir kuraldır, ancak her zaman gerekli değildir. –
Tamam, açıklama için teşekkürler. Ancak, yine de, http://127.0.0.1 ve http: // localhost ile erişirken bile, aynı sanal ana makinede aynı wsgi betiği için 2 altyazıcı yarattığı için% {RESOURCE} varsayılanının talihsiz olduğunu düşünüyorum. Bu çok sihir. –
% {RESOURCE}, eşleştiği VirtualHost'dan ServerName değerini kullanmalıdır. Eğer o değilse, Apache konfigürasyonu ile ilgili bir sorun var demektir. –