Ich bin derzeit ein Problem mit Passenger (4.0.18) in Kombination mit einer einfachen Rails 4.0.0-Anwendung. Problem ist, dass nach dem Start Apache, die erste Anfrage ist sehr langsam (in der Regel 30.x Sekunden). Die folgenden Anfragen sind wirklich schnell, aber wenn die App für 20+ Sekunden inaktiv ist, passiert das gleiche wieder.Passagier langsam beim Start und nach einigen Sekunden Leerlaufzeit
Jetzt ist dieses Problem in der Regel schon mehrere Male hier diskutiert worden ist, und natürlich habe ich gezwickt bereits die Apache-Konfiguration:
PassengerSpawnMethod smart
PassengerPoolIdleTime 1000
RailsAppSpawnerIdleTime 0
PassengerMaxRequests 1000
PassengerMaxPreloaderIdleTime 0
Aber dies überhaupt nicht helfen. Wenn ich Passagier-Status überprüfen sagt es mir dies:
Version : 4.0.18
Date : 2014-01-31 13:06:59 +0100
Instance: 20601
----------- General information -----------
Max pool size : 6
Processes : 1
Requests in top-level queue : 0
Die lustige daran ist, dass, wenn ich eine ‚Uhr‘ auf Passagier-Status zu tun, während eine Anfrage zu tun, nichts wirklich hier ändert. (Vor allem nicht die Anfragen Zeile).
Ich habe schon mit tcpdump herumgespielt, alle Anfragen sind rechtzeitig eingetroffen, also ist keine Netzwerkverzögerung sichtbar. Ich aktiviert auch erweiterte Apache-Protokollierung (mit zusätzlichen Anfrage Zeiten) - das ist sehr interessant, nehmen wir an, eine normale Anfrage dauert rund 200 ms, dann eine dieser langsamen Anfragen dauert genau 30,2 Sekunden.
Irgendeine Idee, was das verursachen könnte?
Apache ist ein 2.2.15. (RedHat-Version, mit portiert Sicherheits-Patches ... :))
Vielen Dank im Voraus, Björn
Hallo, danke für deine Hilfe - das habe ich schon ausprobiert, leider ohne Erfolg. Ich habe mich gefragt, ob dies zumindest für die erste Anfrage (durch "Vortäuschen" einer ersten Anfrage) hilfreich gewesen sein sollte, aber nach einer gewissen Zeit keine Auswirkungen auf die nachfolgende Anfrage haben sollte (wo ich auch Probleme habe)) - zumindest nicht mit PreloaderIdleTime und PoolIdletime auf 0 und 1000 gesetzt. (So sollten alle Prozesse eine Zeit lang überleben). Gibt es einen Punkt, an dem ich klar sehen kann, wann Passagierprozesse wegen einer Zeitüberschreitung oder dergleichen entfernt werden? – McSlow
Versuchen Sie, die Richtlinie PassengerMinInstances hinzuzufügen. In Kombination mit PassengerPreStart sollte es Ihre Probleme lösen. Referenz: http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances – niiru
Hallo vielen Dank für Ihre Hilfe. Ich habe endlich herausgefunden, was das Problem war. Erstens: Beide Anweisungen wurden benötigt, um die anfängliche Verzögerung zu beseitigen. Und das funktioniert gut. Das Problem für die nachfolgenden Verzögerungen war eine völlig andere Geschichte: Der Apache httpd hat ein "GetAccess" -Modul installiert, welches eine sehr proprietäre zentrale Berechtigungssoftware ist, da einer der Backend-Server Probleme machte und niemand es bemerkte. Schließlich fand es heraus, indem es das Passagierprotokoll erhöhte und prüfte (die Anfrage erreichte den Zugang zum Apache-Zugang, wurde aber 30 Sekunden später vom Passagier erledigt ...) – McSlow