Das hat uns wirklich hart in den Arsch auf unserem Produktionsserver gestoßen. Wir haben das gelegentlich gesehen (für 1 Anfrage pro Woche). Damals haben wir herausgefunden, dass mod_wsgi in einigen Konfigurationen funky ist. Da wir den Grund für den Fehler nicht finden konnten, entschieden wir uns, dass es keine sofortige Aufmerksamkeit erforderte.
Heute ist dies jedoch auf einem unserer Produktionsserver wirklich bei 10% aller Serveranfragen der Fall; das sind 10% aller Serveranforderungen, die mit genau diesem Fehler fehlgeschlagen sind:
%Vor%Ubuntu Precise, 64bit, mit dem neuesten Apache, mod_wsgi, Python 2.7, mit mpm_worker + mod_wsgi im Daemon Modus. Dies ist das einzige Programm, das auf dem Server läuft und es gibt nur einen WSgi-Interpreter in der Konfiguration. Liegt das daran, dass mpm_worker neue Threads erzeugt oder was? Noch wichtiger - wie können wir es beheben?
Wir haben die folgenden Aufgaben, um Anfragen auf 4 Daemon-Prozesse basierend auf einem Cookie zu unterteilen.
%Vor%Es ist seit Jahren bekannt, dass mehrere Subinterpreter nicht gut in C-Extensions spielen. Was ich jedoch nicht bemerkt habe ist, dass die Standardeinstellungen sehr unglücklich sind. Das ModWSGI-Wiki gibt eindeutig an, dass der Standardwert für die WSGIApplicationGroup-Direktive% {RESOURCE} ist soll das sein
Der Name der Anwendungsgruppe wird auf den Hostnamen und den Port des Servers gesetzt Wie für die Variable% {SERVER}, auf die der Wert der WSGI-Umgebung lautet Die Variable SCRIPT_NAME wird durch das Dateitrennzeichen getrennt angehängt Zeichen.
Dies bedeutet, dass für jeden Host: Header, der jemals beim Zugriff auf den Server aufgetreten ist, der mod_wsgi freundlicherweise einen neuen Subinterpreter erzeugt, für den dann die C Erweiterungen geladen werden.
Ich hatte unwissentlich den Fehler durch den Zugriff auf localhost.invalid: 81 mit Links Browser auf diesem lokalen Server ausgelöst, was dazu führte, dass einer unserer 4 WSGIDaemonProcesses für alle zukünftigen eingehenden Anfragen fehlschlug.
Summa summarum: Stellen Sie bei Verwendung von mod_wsgi mit Pyramiden oder einem anderen Framework, das C-Erweiterungen verwendet, sicher, dass WSGIApplicationGroup immer auf% {GLOBAL} festgelegt ist. Mit anderen Worten, das Ergebnis der Verwendung der Standardeinstellungen wird dazu führen, dass Sie sich in den Fuß schießen, nach dem Sie sich vielleicht auch in den Kopf schießen wollen.