mod_perl - Anfragen werden nur sporadisch beantwortet
Christian
- webserver
Hallo zusammen,
ich habe versucht mod_perl zum Laufen zu bringen, aber es gibt kleine Probleme, für die ich keine Lösung finde.
Perl-Skripte werden mit mod_perl verarbeitet, da gibts keine Probleme. Allerdings werden die Anfragen nur sporadisch beantwortet. Eine Packet-Analysis zeigt folgendes:
Die TCP-Verbindung wird vom Browser aufgebaut, dann sendet er den HTTP-Request und dieser wird vom Apache mit einem sofortigen FIN beendet. Der Browser stellt natürlich die Anfrage nochmal und spätestens beim vierten Versuch bekommt er dann auch eine Antwort.
Bis die Antwort aber kommt, dauert das auch. Etwa so lange, wie wenn das Skript (Test-Skript, gibt nur ein bisschen Text aus) neu gestartet würde (etwa 2 Sekunden). Aber mod_perl läuft und $ENV{'MOD_PERL'} ist auch gesetzt.
Und wenn dann die Antwort kommt, dann dauert es noch 15 Sekunden bis die TCP-Verbindung mittels FIN vom Apache abgebaut wird.
Solche TCP-Probleme hatte ich sonst noch nirgends. Es wirkt alles sehr komisch... vor allem, weil der Aufruf des Skripts dann doch noch 2 Sekunden dauert. Würde mich freuen, wenn ihr mir helfen könnt, ich finde dazu im Internet keine Lösung.
Das ganze läuft auf einem P-133 mit Apache 2.2.3, mod_perl 2.0.2, Perl 5.8.8 auf Debian-lenny.
Vielen Dank
Christian
Hallo Christian,
laufen denn die normalen HTTP-Anfragen sauber durch?
LG
Chris©
Hallo Chris,
ich hatte noch ein paar weitere Ideen und nun auch weitere Ergebsnisse. Zum ersten gehe ich davon aus, dass der Apache 15 Sekunden mit dem Abbauen der Verbindung wartet, damit für weitere Anfragen, z.B. Bilder, nicht noch eine weitere Verbindung aufgebaut werden muss. Das ist hier aber egal :)
Normale HTTP-Requests, also .html-Dateien laufen sauber durch. Auch "einfache" Perl-Skripte laufen mit mod_perl sauber, Fürs Ausgeben von ein paar Zeilen Text dauerts etwa 0.2s. Soweit so gut.
Die Probleme treten bei "großen" Skripten auf. Ich habe ein größeres Projekt mit einigen Modulen und dort tritt das Problem ab und zu auf. Im error.log vom Apache finde ich häufig folgende Zeile:
[notice] child pid 1998 exit signal Segmentation fault (11)
Daher kommen dann auch die FINs auf den HTTP-Request. Aber manchmal funktioniert die Anfrage eben.
Aber bei dieser Anfrage kann ich keinen Geschwindigkeitsvorteil durch mod_perl feststellen. Das Skripte braucht für den ersten Lauf etwa 13s und bei einem Reload ändert sich nichts. Manchmal braucht es auch 25s oder 17s, aber einen Vorteil durch mod_perl kann ich noch nicht erkennen.
Die Frage insgesamt ist also, woher die Segmentation faults kommen und warum das Skript trotz mod_perl solange braucht (das Skript gibt eigentlich nur ein HTML-Formular aus und lädt dafür CGI, DBI, Session und noch ein paar kleine andere Module)
Viele Grüße
Christian
Hallo Christian,
Die Probleme treten bei "großen" Skripten auf. Ich habe ein größeres Projekt mit einigen Modulen und dort tritt das Problem ab und zu auf. Im error.log vom Apache finde ich häufig folgende Zeile:
[notice] child pid 1998 exit signal Segmentation fault (11)
Das kommt mir bekannt vor von meinen Versuchen mit mod_perl Ver 1.0
Da hatte ich einfach vergessen, die CGI-Unterstützung für Perl rauszunehmen. Beides auf einmal hat sich nicht vertragen.
Ich habe dann aber mod_perl wieder rausgenommen, weil es angeblich noch gefährliche Sicherheitslücken hatte und die Sache nicht weiter verfolgt.
LG
Chris©
Hallo Chris
Das kommt mir bekannt vor von meinen Versuchen mit mod_perl Ver 1.0
Da hatte ich einfach vergessen, die CGI-Unterstützung für Perl rauszunehmen. Beides auf einmal hat sich nicht vertragen.
Jetzt, wo ich deinen Beitrag lese, fällt mir wieder ein, was ich vor langer Zeit gelesen hatte. Man muss das CGI-Modul objektorientiert verwenden, falls man mod_perl benutzt... Da werd ich nochmal nachschauen. mod_perl_traps ist einfach vielzuviel, um alles beim ersten Mal zu überblicken und alles nachschauen zu können.
Ich habe dann aber mod_perl wieder rausgenommen, weil es angeblich noch gefährliche Sicherheitslücken hatte und die Sache nicht weiter verfolgt.
Na hoffentlich ist es jetzt sicher ;)
Viele Grüße
Christian