Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Verständnisfrage zu Verhalten von Webserver

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.01.2006, 14:10

Schuster bleib bei deinen Leisten und so. Tu ich aber nicht, sondern will nun auch endlich mal Serveradmin spielen. Ich hasse es nämlich bei sowas eigentlich “einfachem” auf andere Leute angewiesen zu sein:

Ich betreibe auf einem Rechner im Nebenzimmer einen “Webserver” (Wahlweise WinXP mit XAMPP oder Ubuntu mit LAMPP: Apache2, PHP4, MySQL5) zum Rumspieln. Ich habe ein wunderbares Script das ca. 10 Sekunden braucht um ausgeführt zu werden, danach leitet es sich auf sich selbst, mit dem aktuellen Timestamp als Parameter, weiter. Den gebe ich dann gleich am Anfang des Scripts wieder aus, um zu schauen wie lange der Webserver gebraucht hat um die Anfrage zu bearbeiten.

Habe ich nur ein Browserfenster offen, braucht der Webserver 0 Sekunden - ganz wie erwartet. Der Rechner tut in dem Moment ja auch absolut nichts anderes als das Script aufzurufen. Es reicht aber 4 oder 5 Tabs mit eben diesem Script zu öffnen um die Antwortzeit auf über 10 Sekunden hochschnellen zu lassen.

Die Prozessorbelastung liegt bei unter 25%, auch sonst erkenne ich keinerlei Probleme wieso das so langsam gehen sollte. Hat jemand hier Ahnung von Apache und könnte mir vielleicht erklären woran das liegt?

Und bitte die Wörter "DAU" und "Volldepp" aussparen wenns geht :)

Danke,
Jan

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Fantomas
PostRank 4
PostRank 4
Beiträge: 187
Registriert: 18.09.2005, 17:00
Wohnort: Berlin

Beitrag von Fantomas » 04.01.2006, 15:38

Hi,
Southmedia hat geschrieben:Die Prozessorbelastung liegt bei unter 25%, auch sonst erkenne ich keinerlei Probleme wieso das so langsam gehen sollte. Hat jemand hier Ahnung von Apache und könnte mir vielleicht erklären woran das liegt?
Prozessorbelastung ist ja nur eines von vielen - was macht denn dein 10 Sekunden Script?
Vielleicht macht dein Script die Leitung dicht oder greift massiv aufs Filesystem zu, so dass da der Engpass entsteht.

Ich glaube nicht, dass es am Apache liegt - selbst ohne Optimierung sollten 5 Verbindungen kein Problem sein.

Fantomas

P.S.: cool, jetzt habe ich einen PR von 2 :)
If only you and dead people can read hex,
how many people can read hex then?

Frische Backlinks?

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.01.2006, 15:48

- 3 kurze Anfragen an die Datenbank
- 2 URLs per fsockopen/fputs abrufen
- bisschen Daten bearbeiten und 1 INSERT, 1 UPDATE

Kein Problem alles eigentlich. Drum find ich das ja so komisch.

Anmerken sollte ich evtl noch dass die Anfragen an den Server mit Firefox auf dem selben Rechner an localhost gemacht werden.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Fantomas
PostRank 4
PostRank 4
Beiträge: 187
Registriert: 18.09.2005, 17:00
Wohnort: Berlin

Beitrag von Fantomas » 04.01.2006, 15:58

ok. an den DB sachen wird es wohl nicht liegen.

Am ehesten, dass die beiden URL beim holen deine I-Net-Leitung voll auslasten.
Meinen lokalen Apache (auch ein XAMPP bzw. TSW) kann ich blockieren, wenn ich Daten per FTP hochlade (das sollten ähnliche Befehle sein).
Lass das Script doch mal unter einem Betriebssystem laufen (Ubunto).
Das gleiche Script unter unter Linux läuft bei mir einwandfrei.

F.
If only you and dead people can read hex,
how many people can read hex then?

Frische Backlinks?

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.01.2006, 16:12

Lass das Script doch mal unter einem Betriebssystem laufen (Ubunto).
Das gleiche Script unter unter Linux läuft bei mir einwandfrei.
Das versteh ich nun nicht ganz...

Fantomas
PostRank 4
PostRank 4
Beiträge: 187
Registriert: 18.09.2005, 17:00
Wohnort: Berlin

Beitrag von Fantomas » 04.01.2006, 16:40

soll heissen, auch ich habe ähnliches beobachtet, wenn ein Script unter WAMP läuft und Netztwerkfunktionen aufruft. Gleiches Script unter Linux hat damit kein Problem.

F.
If only you and dead people can read hex,
how many people can read hex then?

Frische Backlinks?

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.01.2006, 16:48

Ach so. Momentan läuft es auf ner brandneuen Ubuntu-Installation :) Daran liegt es also nicht...

Gibt es keine Möglichkeit rauszufinden wo die Schwachstelle ist? Was also dafür sorgt dass der Apache so lange braucht um die Anfrage zu beantworten?

Babelfisch
PostRank 5
PostRank 5
Beiträge: 204
Registriert: 05.10.2005, 14:15
Wohnort: Leipzig

Beitrag von Babelfisch » 04.01.2006, 17:40

Füge doch einfach mal ein Array ein, in welches du an bestimmten Stellen die Zeit und den Arbeitsschritt einfügst. Wenn in dem Script dann die Ausführungszeit länger bei 10 Sekunden liegt, leitest du mal nicht um und gibst statt dessen das Log aus. Also stark vereinfach bspw. so:

Code: Alles auswählen

$script_time = time();
$log = array();

/* Arbeitsschritt Start */
$start_time = time();
$rc = mysql_ ... ;
$log[] = '1. SQL Abfrage ... hat '.(time()-$start_time).' Sekunden gedauert';
/* Arbeitsschritt Ende */
...

if &#40;time&#40;&#41; - $script_time < 10&#41; &#123;

  header&#40;'Location&#58; http&#58;//...'&#41;;

&#125; else &#123;

  header&#40;'Content-type&#58; text/plain'&#41;;
  print&#40;implode&#40;"\n", $log&#41;&#41;;

&#125;
Ich vermute mal, dass sich bei dir irgendwelche Datenbankabfragen gegenseitig blockieren und es deshalb so lange dauert.

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.01.2006, 20:43

Das hilft mir auch nur Probleme im Skript selbst zu finden. Die Problemstelle ist jedoch nach Ausführung und vor Neuaufruf des Scriptes. Hier braucht der Webserver dann 10 Sekunden um zu reagieren.

Babelfisch
PostRank 5
PostRank 5
Beiträge: 204
Registriert: 05.10.2005, 14:15
Wohnort: Leipzig

Beitrag von Babelfisch » 04.01.2006, 23:18

Southmedia hat geschrieben:Das hilft mir auch nur Probleme im Skript selbst zu finden. Die Problemstelle ist jedoch nach Ausführung und vor Neuaufruf des Scriptes. Hier braucht der Webserver dann 10 Sekunden um zu reagieren.
Woher weißt du, dass der Webserver die 10 Sekunden braucht und nicht das Script selbst? Irgendwie glaube ich das nicht. Das könnte man vielleicht höchstens noch mit einem falsch eingerichteten CGI erklären.

Wie schon gesagt, würde ich das Script mal mit ein paar Zeitmessungen versehen. Vermutlich findest du da irgendwo die Engstelle.

Wenn es immer ziemlich genau 10 Sekunden sind, könne das Problem auch bei der DNS-Auflösung liegen. Vielleicht hast du einen falschen Nameserver eingetragen und in bestimmten Situationen fragt der Webserver oder das Script einen Hostnamen bis zum Timeout ab.

Hasso
PostRank 9
PostRank 9
Beiträge: 2107
Registriert: 12.01.2004, 13:18

Beitrag von Hasso » 04.01.2006, 23:19

@Southmedia
Das Problem dürfte hier bei dem Art und Weise, wie Du die Script aufrufst liegen.
Nämlich – Architektur der PHP Modul von Apache und Deinem Browser.
Ich gehe stark davon aus, dass Du gleichzeitig unter einem und dem gleichen Hostname/IP nur zwei Mal das Script aufrufen kannst, die anderen warten währenddessen auf die Ende der Ausführung von ersten beiden...

Grüsse
Hasso

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 04.01.2006, 23:28

Babelfisch, das Script wird mit einem aktuellen Timestamp im Browser aufgerufen. Aufrufzeitpunkt = Timestamp. Die erste Aktion die das Script macht, ist diesen Timestamp mit dem mittlerweile gültigen Timestamp zu vergleichen. Die Differenz ist dann die Zeit die der Webserver zum beantworten der Anfrage gebraucht hat. Bei "localhost" gibt es zum Glück auch nicht ach so viel zum auflösen :)

Hasso, das wäre natürlich eine absolut logische Erklärung. Gibt es dafür irgendwelche Einstellungsmöglichkeiten in den Konfigurationsdateien vom Apache?

Babelfisch
PostRank 5
PostRank 5
Beiträge: 204
Registriert: 05.10.2005, 14:15
Wohnort: Leipzig

Beitrag von Babelfisch » 04.01.2006, 23:28

@Hasso: In Firefox (network.http.max-connections-per-server) und AFAIK auch im IE sind standardmäßig 8 gleichzeitige Verbindungen pro Server erlaubt. Auch in den Apache-Grundeinstellungen (MaxKeepAliveRequests) dürften entschieden mehr erlaubt sein. Mit aktiviertem KeepAlive sollten also mehr als 2 Scripts gleichzeitig bedient werden können.

Hasso
PostRank 9
PostRank 9
Beiträge: 2107
Registriert: 12.01.2004, 13:18

Beitrag von Hasso » 04.01.2006, 23:35

@Babelfisch
Theoretisch ja, aber in der Praxis kännte es auch anders laufen... hmmm...

@Southmedia
Probiere mal folgendes:
Starte zwei Aufrufe mit "localhost" sowie zwei weiteren mit "127.0.0.1"
Wie sieht es aus?

Babelfisch
PostRank 5
PostRank 5
Beiträge: 204
Registriert: 05.10.2005, 14:15
Wohnort: Leipzig

Beitrag von Babelfisch » 04.01.2006, 23:36

Southmedia hat geschrieben:Bei "localhost" gibt es zum Glück auch nicht ach so viel zum auflösen :)
Auch der Hostname "localhost" muss aufgelöst werden.

Was die Möglichkeit der Ausbremsung durch den Browser oder Server angeht:

- In Firefox about:config in der URL-Bar eingeben, nach "http" suchen und "network.http.max-persistent-connections-per-proxy" mal auf 16 stellen. Evtl. mal "network.http.pipelining" dekativieren oder "network.http.pipelining.maxrequests" erhöhen. Wenn es nichts hilft, auch mal "network.http.keep-alive" deaktivieren.

Nach allen Änderungen am besten Fireefox neu starten.

- Apache 2: In der httpd.conf MaxKeepAliveRequests erhöhen und je nach verwendetem MPM dort auch mal nachschauen.

Wichtig wäre auch noch zu wissen, ob PHP als Modul oder CGI läuft.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag