Beitrag von mk (966 Beiträge) am Freitag, 15.Juni.2007, 20:42.
Template mit Fehler gesucht
Hallo,
jetzt beobachte ich wenn ich am Rechner bin mit putty und de befehl top, was auf meinem Server passiert.
So sehe ich, das im Normalfall alles ok ist, auch das eine Reorganisation sehr viel verbraucht und auch nach dem schließen de Browasefenster weiterläuft ne Weile.
Jetzt zu meinem Problem, es gibt bei mir wohl ein Template welches sehr selten alleine oder mit bestimmten Parametern aufgerufen wird und enorm lange läuft.
Gibt es ne Möglichkeit herrauszufinden was dies ist?
Es muß auch schon vor dem Umzug gewesen sein.
Michael
Antworten
Beitrag von Pouraga (1396 Beiträge) am Freitag, 15.Juni.2007, 21:47.
Re: Template mit Fehler gesucht
Antworten
Beitrag von hempelr (1976 Beiträge) am Sonntag, 17.Juni.2007, 19:50.
Re: Template mit Fehler gesucht
sorry, Pouraga, aber das hilft leider nicht beim Herausfinden des Baseportal-Templatenamens. Es wird da immer nur der Status der BasePortal.pl angezeigt und nicht, welches Template (nun, wie auch, da ja die baseportal.pl die Templates mittels require einliest und man nicht mal mit BasePortal-Mitteln rausbekommt, wie denn wann was für ein Template gerade läuft - bspw. per include)
Wenn es denn doch eine Lösung dafür gäbe, wäre ich auch an Hinweisen dazu interessiert (weil es immer mal passieren kann, dass ein wildgewordenes Script oder Scriptteil plötzlich und unerwartet den Server anhält). Aber ich glaub da hat selbst Christoph noch nix gefunden, denn sonst wäre es ja ein Leichtes, Ressourcenfresserscripte schnell zu lokalisieren und abzuschießen bzw. den Besitzer oder Betreiber zu informieren....
Antworten
Beitrag von mk (966 Beiträge) am Dienstag, 19.Juni.2007, 22:16. WWW: vokabeltrainer-online.net
Re: Template mit Fehler gesucht
hat keine eine Lösung,
hab heute Abend nach einiger Zeit wieder 2 killen müssen.
nur wie finde ich den (das Template) Verursacher?
Michael
Antworten
Beitrag von richard (1187 Beiträge) am Mittwoch, 20.Juni.2007, 08:31. WWW: posaunenchor-rhoden.de
Re: Template mit Fehler gesucht
Schlage mal vor, die Laufzeiten der in Betracht kommenden Skripte nicht (nur) anzuzeigen sondern auch abzuspeichern, wenn eine festgelegte Laufzeit überschritten wird und das dann auszuwerten.
Muß man halt in die in Betracht kommenden Templates einbauen, eventuell in einen einheitlichen Fußbereich.
Antworten
Beitrag von hempelr (1976 Beiträge) am Mittwoch, 20.Juni.2007, 10:03.
Re: Template mit Fehler gesucht
hast du dazu ne Idee zur Realisierung ? - das ist wirklich ein wichtiges fehlendes Fature
Wenn eine Endlosschleife irgendwo vor dem Fussbereich kommt, dann wird nie abgespeichert, weil dieser Teil nicht erreicht wird.
Das Problem ist doch hier offenbar die Sporadik, mit der es auftritt.
Wenn es eine einfache Möglichkeit in BP gäbe, zu loggen, welches Template wann von wem (also die URL) aufgrufen und wieder beendet wird, dann wäre alles klar, und man hätte eine universelle Laufzeit- und Aufrufkontrolle, wildgewordene oder auch langlaufende Scripte könnten eindeutig lokalisiert werden (auch wenns gewollt ist, man kann so bspw. komplexe, lang laufende Auswertungsscripte auf die Nachtstunden verlegen) - aber im Momment ist das leider nur ein Fischen im Trüben.
Selbst die Entwickler von BasePortal können n i c h t feststellen, welches Script von welchem Nutzer wann wie lange gelaufen ist. (oder sollten Sie und wir wissen es nur nicht?)
Es kann nur festgestellt werden, dass irgendein baseportal.pl-Prozess (vielleicht auch noch von welchem Nutzer) lang läuft. Welches Template das verursacht ist vollkommen aussen vor.
Lösung ist nur von den Entwicklern möglich - Ansatz:
- jeder Start der baseportal.pl wird in ein Logfile geschrieben (müsste ja noch über die access.log von apache machbar sein)
- jedes Template welches die baseportal.pl öffnet und ausführt wird zur Laufzeit der baseportal.pl in einen Hash der baseportal.pl geschrieben, gleichzeitig wird der Start bzw. das Laden jedes Benutzer-Templates direkt ans Logfile angehängt (damit man eben auch nach Abschießen der Baseportal.pl erkennen kann, welches wann geladen wurde)
- Nach Abarbeitung der/des Templates und vor Beendigung der baseportal.pl werden die Hashdaten in ein Text-Logfile bspw. im _user-Verzeichnis geschrieben und ein Beendigungscode, damit man erkennt, dass der Thread ordnugnsgemäß (also nicht gewaltsam durch Nutzereingriff) beendet wurde.
Wichtige Größen wären die PID, Startzeit, Endzeit des Baseportal-Prozesses, Name des geladenen und abgearbeiteten Templates (Includes wäre sinnvoll mit einzuschließen)
- per Logdatei-Check wird abgeprüft, wie gross und alt die Logdatei ist, wenn sie zu gross oder zu alt ist wird ein zusätzliches Script ausgeführt welches entweder die Logdatei komprimiert und eine neu anlegt (täglich) und/oder ältere (bspw. älter als 7 Tage) löscht.
Leider ist es ja nicht möglich, sowas zu versuchen einzubauen. (*sarkasmus on* im OS-Bereich würde das kein Problem darstellen, wäre schon längst von inrgeneinem Profi gefixt *sarkasmus off*)
Nur so, wie man sich das vorstellen könnte und man als Serverbetreiber da dann sinnvoll und gezielt Ressorcenkiller finden würde....
Ich werd mich mal im Debian-Forum versuchen schlau zu machen, vielleicht gibts ja ne Möglichkeit, die PID, den Aufrufzeitpunkt und die aufrufende URL zu loggen...das wär ja schon mal was...
Antworten
Beitrag von Claus (4645 Beiträge) am Mittwoch, 20.Juni.2007, 10:15. WWW: hummelexpress.de
Re: Template mit Fehler gesucht
Antworten
Beitrag von hempelr (1976 Beiträge) am Mittwoch, 20.Juni.2007, 11:06.
Re: Template mit Fehler gesucht
mhm - wahrscheinlich doch nicht schlecht die Idee...
müsste zwar in jedes Template in den Kopf und in den Fuss, aber logischerweise könnte das funzen (es sei denn, die DB wird bei jeder Menge Aufrufen riesengross, was aber auszuprobieren wäre...)
Danke für den Gedankenansatz.
Grüße aus dem Erzgebirge an die BasePortaler und an die Norddeutschen... :-)
Antworten
Beitrag von richard (1187 Beiträge) am Mittwoch, 20.Juni.2007, 11:16. WWW: posaunenchor-rhoden.de
Re: Template mit Fehler gesucht
Antworten
Beitrag von Claus (4645 Beiträge) am Mittwoch, 20.Juni.2007, 11:33. WWW: hummelexpress.de
Re: Template mit Fehler gesucht
Na, da nich für, hast mir ja auch oft genug geholfen.;-)
Wie richard schon schreibt, kannst du das auch direkt wieder löschen, z.B.
wenn Laufzeit kleiner 0.25 löschen sonst Laufzeit über mod abspeichern. Damit findest Du sowohl das eine wie das andere.
Gruß aus dem heute mal sonnigen Hamburg
Claus
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 20.Juni.2007, 20:23.
Re: Template mit Fehler gesucht
Dein Vorschlag müßte gehen,
ob ich das hinkriege?
Hab eben ein Vorgang der schon 93 Min. lief killen müssen.
Michael
Antworten
Beitrag von mk (966 Beiträge) am Mittwoch, 20.Juni.2007, 21:19.
Re: Template mit Fehler gesucht
hab angefangen,
das hab ich noch nicht geschaft:
- übergebene Parameter fehlen noch
- .runtime abzuspeichern
weis einer wie?
Michael
Antworten
Beitrag von Sander (8133 Beiträge) am Mittwoch, 20.Juni.2007, 22:48.
Re: Template mit Fehler gesucht
Antworten
Beitrag von mk (966 Beiträge) am Donnerstag, 21.Juni.2007, 10:59.
Re: Template mit Fehler gesucht
Antworten
Beitrag von Sander (8133 Beiträge) am Donnerstag, 21.Juni.2007, 12:05.
Re: Template mit Fehler gesucht
Antworten
Beitrag von mk (966 Beiträge) am Donnerstag, 21.Juni.2007, 20:55.
Re: Template mit Fehler gesucht
habe mir deins runtergeladen,
hab aber keinen Ansatz was ich damit machen kann.
ich war immerhin der sechste seit 2003 der dies holte.
vardump muß wohl unverändert bleiben,
dies muß ich dan bei mir einbinden aber wie bzw wo?
<perl>
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= gmtime(time);
$sid_pr=(((($year*365)+$yday)*24+$hour)*60+$min)*60+$sec ;
$IP=$_REMOTE_ADDR;
$useragent=$_HTTP_USER_AGENT;
#$cgi1=serial{%_cgi};# geht erst ab v3
#$sel1=serial{%_sel};# geht erst ab v3
#$put1=serial{%_put};# geht erst ab v3
#$get1=serial{%_get};# geht erst ab v3
put ["IP", "$IP", "sid", "$sid_pr", "useragent", "$useragent", "htx", "$htx", "cgi1", "$cgi1", "sel1", "$sel1", "put1", "$put1", "get1", "$get1"], "protokoll";
</perl>
leider waren eben 3 Prozesse zu killen.
Ich muß was tun in der V2 da die V3 erst in unbestimmte Zeit verfügbar ist in der Lizenz.
Michael
Antworten
Beitrag von hempelr (1976 Beiträge) am Donnerstag, 21.Juni.2007, 21:18.
Re: Template mit Fehler gesucht
Antworten
Beitrag von Pouraga (1396 Beiträge) am Donnerstag, 21.Juni.2007, 22:15.
Re: Template mit Fehler gesucht
Man kann nicht mit dem Programm, Fehler im Programm finden, woher willst du wissen wann der Prozess sich aufhängt, entweder schreibt er die Daten vorher in eine DB weg oder nachher. Also sind sie da oder nicht, aber wissen welcher aufruf stehen geblieben ist weisst du dadurch trotzdem nicht.
ein aufruf von apachectl fullstatus bringt dir in etwa so ein Bild:
Srv PID Acc M CPU SS Req Conn Child Slot Client VHost Request
8-0 16573 0/120/2796 _ 25.50 29 360 0.0 1.38 30.14 217.230.113.236
ruhrpott-mini-ig.de GET /files/album_62/pic_1337_smart.jpg HTTP/1.1
9-0 16572 0/121/2633 _ 22.69 41 1293 0.0 1.10 29.88 84.61.72.177
ruhrpott-mini-ig.de GET
/cgi-bin/baseportal.pl?htx=/forum&wcheck=1&range=100,100&Po
10-0 - 0/0/269 . 0.00 1479 610 0.0 0.00 4.91 66.249.66.143 eggx.de GET
/w/index.php?title=MediaWiki_Diskussion:Jan&action=edit HTT
11-0 - 0/0/113 . 0.00 1483 227 0.0 0.00 1.21 89.48.169.166
ruhrpott-mini-ig.de GET /grafik/logo/navibuttonback.gif HTTP/1.1
12-0 - 0/0/77 . 0.00 1473 870 0.0 0.00 0.38 74.6.18.228 irgendwo.de
GET /baseportal/see?kategorie=110&neu=&suche= HTTP/1.0
13-0 - 0/0/21 . 0.00 1466 1021 0.0 0.00 0.12 74.6.17.170
ruhrpott-mini-ig.de GET /baseportal/album/bild?getId=73& HTTP/1.0
14-0 - 0/0/14 . 1.41 1400 974 0.0 0.00 0.10 74.6.18.20
Wie du siehts sieht man sowol bei kurzen wie auch langen Aufruf den gesamten query string, zusammen mit prozesszeit und speichernutzung, Was willst du mehr?
Antworten
Beitrag von mk (966 Beiträge) am Donnerstag, 21.Juni.2007, 22:27.
Re: Template mit Fehler gesucht
Antworten
Beitrag von Pouraga (1396 Beiträge) am Donnerstag, 21.Juni.2007, 22:39.
Re: Template mit Fehler gesucht
Antworten
Beitrag von richard (1187 Beiträge) am Freitag, 22.Juni.2007, 08:09. WWW: posaunenchor-rhoden.de
Re: Template mit Fehler gesucht
Antworten
Beitrag von mk (966 Beiträge) am Freitag, 22.Juni.2007, 21:16.
Re: Template mit Fehler gesucht
Danke richard für die Lösung,
dein Code klappt, hab ihn per include eingebunden zusammen mit meinem Ende Code und es geht.
Wenn ich dies nun laufen lasse, ist sicherlich nach 2-3 Tagen mein Limit mit 100.000 Einträgen überschritten.
Aber ich sehe was passiert.
Michael
Antworten
Beitrag von mk (966 Beiträge) am Samstag, 23.Juni.2007, 15:59. WWW: brueckenbau-links.de
Re: Template mit Fehler ist gefunden
Durch die Protokolierung hab ich nun den ersten Übeltäter gefunden.
Liegt warscheinlich an fehlende Parameter in Links bei den Suchmaschienen.
Michael
Antworten
Beitrag von Sander (8133 Beiträge) am Donnerstag, 21.Juni.2007, 22:41.
Re: Template mit Fehler gesucht
Antworten
Beitrag von richard (1187 Beiträge) am Mittwoch, 20.Juni.2007, 11:09. WWW: posaunenchor-rhoden.de
Re: Template mit Fehler gesucht
So wie der Claus würde ich das auch erst einmal angehen.
Antworten
Beitrag von mk (966 Beiträge) am Donnerstag, 12.Juli.2007, 20:46. WWW: vokabeltrainer-online.net
Re: Template mit Fehler gesucht - die Lösung
So hab ich es umgesetzt:
Der Anfang des Templates
<perl>
include "../kopf";
</perl>
das eigentliche Template
<perl>
include "../fuss";
</perl>
Das Ende des Templates
Inhalt des Kopf Templates:
<perl>
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)= gmtime(time);
$sid_pr=(((($year*365)+$yday)*24+$hour)*60+$min)*60+$sec ;
$zufallszahl = int(rand(100));
$sid_pr=$sid_pr*(1+($zufallszahl)) ;
$get1 ="";
$cgi1 ="";
$sel1 ="";
$put1 ="";
$IP=$_REMOTE_ADDR;
$useragent=$_HTTP_USER_AGENT;
while(@paare = each(%_get))
{
$get1 = $get1."$paare[0]"."="."$paare[1]"." | ";
}
while(@paare = each(%_cgi))
{
$cgi1 = $cgi1."$paare[0]"."="."$paare[1]"." | ";
}
while(@paare = each(%_sel))
{
$sel1 = $sel1."$paare[0]"."="."$paare[1]"." | ";
}
while(@paare = each(%_put))
{
$put1 = $put1."$paare[0]"."="."$paare[1]"." | ";
}
put ["IP", "$IP", "sid", "$sid_pr", "useragent", "$useragent", "htx", "$htx", "cgi1", "$cgi1", "sel1", "$sel1", "put1", "$put1", "get1", "$get1"], "protokoll";
#out "Test: $_Id <br>" ;
</perl>
Der Inhalt des Fuss Templates:
<perl>
$laufzeit=runtime ;
mod "sid==$sid_pr", ["laufzeit", "$laufzeit"], "protokoll";
</perl>
Geht bestimmt noch besser.
Michael
Antworten