Hallo Liste, Ein Freund und ich betreiben einen hoch frequentierten Webserver für eine Internetseite. Im Moment werkelt dort ein 3 GHz AMD Athlon mit 1 GB Ram für den Apache Server und ein zweiter Rechner (identisch) für die MySQL-DB. Der Rechner für den Apache ist noch mit SUSE 9.1 zugange. Nun passiert es zu den Hauptlastzeiten, dass der Ansturm auf die Seite so groß ist, dass dem Apache den Arbeitsspeicher nicht mehr genügt und er beginnt, Prozesse in die Swap-Partition auszulagern. Die Swap läuft dann durch die verschlechterte Performance bei gleicher Anfragelast auch recht schnell voll und die Kiste hängt sich auf. Nun ist es so, dass die rechner im RAM nicht erweitert werden können und wir deshalb überlegt haben, einen performanteren Rechner anzunmieten. Dazu hat uns Hetzner folgendes Angebot gemacht: ----- CPU (AMD Opteron 246 mit 2,0 GHz) Mainboard (Tyan K8W Dual Processor) 4x1GB RAM DDR 400 ECC REG 250 GB SATA HDD Zum Preis (inkl. 16% MwSt.) mit einem Prozessor: Setup 129 Euro, Monatliche Grundgebühr 139 Euro mit zwei Prozessoren: Setup 149 Euro, Monatliche Grundgebühr 169 Euro ----- Nun ist es so, dass die Kosten immer weiter steigen dadurch und wir nach Lösungen suchen. Deshalb meine Frage: Ist es sinnvoll, einen hochperformanten Server zu betreiben oder viele 'kleinere' Systeme als Rechnerverbund? Hat jemand von euch Erfahrungen mit solchen Systemen? Wäre für ein paar Erfahrungen zu diesem Thema sehr dankbar. -- mit freundlichen Grüßen, Stephan Chudowski Maßmannstraße 100A 18057 Rostock Tel.: 0381 / 201 43 03 Funk: 0179 / 463 91 34 kuddel@mv-spion.de http://www.mv-spion.de
Hallo Stephan. Wieviele Verbindungen habt ihr denn zu den Spitzenzeiten jede Sekunde,das der Rechner nicht mehr nachkommt? Ich denke,hier ist es für euch wichtiger herauszufinden,was zu lange dauert.Wenn es viele dynamische Seiten sind,könnten die PHP-Skripte zu langsam sein,vielleicht ist php auch generell nicht schnell genug.Oder cgi/perl bremsen die Auslieferung. Möglicherweise ist auch die Datenbank zu langsam mit den Antworten. Könnte das Problem nicht eher dadurch behoben werden?Bzw. durch andere Einstellungen beim Apache (insbesondere mod_cache)? Ich habe mal einen Server(1Ghz,512MB) getestet,welcher jede Sekunde rund 500 bis 800 einfache HTML-Seiten ausgeliefert hat.Mit php und mysql dürfte das ziemlich absinken. Gruß, Andreas
Am Do November 24 2005 17:23 schrieb Andreas Kern:
Wieviele Verbindungen habt ihr denn zu den Spitzenzeiten jede Sekunde,das der Rechner nicht mehr nachkommt?
Naja, dort sind zu den Hauptlastzeiten im Moment gut 600 Personen gleichzeitig online, die sich durch Single-Profile durchklicken wie wahnsinnig ;) . Es sind dynamische Seiten, PHP-generiert. Die DB liegt schon auf einem zweiten Server, das ist es also sicher nicht.
Ich denke,hier ist es für euch wichtiger herauszufinden,was zu lange dauert.Wenn es viele dynamische Seiten sind,könnten die PHP-Skripte zu langsam sein,vielleicht ist php auch generell nicht schnell genug.Oder cgi/perl bremsen die Auslieferung.
PHP scheint nicht der Hänger zu sein, eher der Apache.
Möglicherweise ist auch die Datenbank zu langsam mit den Antworten.
Nein, das ist es auch nicht, das erfolgt alles im Millisekundenbereich und ist damit definitiv okay ;)
Könnte das Problem nicht eher dadurch behoben werden?Bzw. durch andere Einstellungen beim Apache (insbesondere mod_cache)?
Werden wir uns mal anschauen.
Ich habe mal einen Server(1Ghz,512MB) getestet,welcher jede Sekunde rund 500 bis 800 einfache HTML-Seiten ausgeliefert hat.Mit php und mysql dürfte das ziemlich absinken.
Ja, das Limit scheint tatsächlich erreicht zu sein mit dieser Hardware. Deshalb die Überlegung, aufzustocken. Nur was ist da am cleversten? -- mit freundlichen Grüßen, Stephan Chudowski Maßmannstraße 100A 18057 Rostock Tel.: 0381 / 201 43 03 Funk: 0179 / 463 91 34 kuddel@mv-spion.de http://www.mv-spion.de
Benutzt ihr prefork oder worker? Vielleicht läßt sich beim Apache mit mod_cache,mod_mem_cache und mod_disk_cache etwas verbessern,wenn ich solche Dinge wie Einstiegsseiten usw. direkt im Cache haltet,dann nähert sich es für euren Rechner vielleicht an 1000 bis 2000 Seiten an. Für den zukünftigen Rechner braucht ihr also dann nur viel RAM.Schaut euch doch mal an,welche Seiten am häufigsten abgerufen werden und daher im Cache gut aufgehoben wären.Deren Größex3 ist vielleicht ein gute Anhaltspunkt für die Menge an RAM.(ggf.zzgl. Betriebssystem und sonstigen,ja..) Falls euch das noch immer nicht reicht beginnt wohl der Bereich des Load-Balancing,allerdings damit auch ein hoher monetärer Aufwand.(1x Server für mysql und Loadbalancing,E-Mail usw.,und dann 2x Server mit dem Hetzner-Angebot).. Komisch das es keine Daumenregeln/Formeln gibt,um so etwas abzuschätzen. Gruß, Andres Stephan Chudowski schrieb:
Am Do November 24 2005 17:23 schrieb Andreas Kern:
Wieviele Verbindungen habt ihr denn zu den Spitzenzeiten jede Sekunde,das der Rechner nicht mehr nachkommt?
Naja, dort sind zu den Hauptlastzeiten im Moment gut 600 Personen gleichzeitig online, die sich durch Single-Profile durchklicken wie wahnsinnig ;) . Es sind dynamische Seiten, PHP-generiert. Die DB liegt schon auf einem zweiten Server, das ist es also sicher nicht.
Ich denke,hier ist es für euch wichtiger herauszufinden,was zu lange dauert.Wenn es viele dynamische Seiten sind,könnten die PHP-Skripte zu langsam sein,vielleicht ist php auch generell nicht schnell genug.Oder cgi/perl bremsen die Auslieferung.
PHP scheint nicht der Hänger zu sein, eher der Apache.
Möglicherweise ist auch die Datenbank zu langsam mit den Antworten.
Nein, das ist es auch nicht, das erfolgt alles im Millisekundenbereich und ist damit definitiv okay ;)
Könnte das Problem nicht eher dadurch behoben werden?Bzw. durch andere Einstellungen beim Apache (insbesondere mod_cache)?
Werden wir uns mal anschauen.
Ich habe mal einen Server(1Ghz,512MB) getestet,welcher jede Sekunde rund 500 bis 800 einfache HTML-Seiten ausgeliefert hat.Mit php und mysql dürfte das ziemlich absinken.
Ja, das Limit scheint tatsächlich erreicht zu sein mit dieser Hardware. Deshalb die Überlegung, aufzustocken. Nur was ist da am cleversten?
Am Do November 24 2005 18:35 schrieb Andreas Kern:
Benutzt ihr prefork oder worker?
prefork. Worker klappt leider noch nicht, die PHP-Module und die Worker-Module mögen sich wohl irgendwie nicht. Hab das nicht mehr so genau in Erinnerung aber das klappt leider nicht mit 'worker'.
Vielleicht läßt sich beim Apache mit mod_cache,mod_mem_cache und mod_disk_cache etwas verbessern,wenn ich solche Dinge wie Einstiegsseiten usw. direkt im Cache haltet,dann nähert sich es für euren Rechner vielleicht an 1000 bis 2000 Seiten an.
Das Problem ist, dass nahezu alle Seiten voll dynamisch sind. Da gibt es keine Seite, die am häufigsten aufgerufen wird ;/
Für den zukünftigen Rechner braucht ihr also dann nur viel RAM.Schaut euch doch mal an,welche Seiten am häufigsten abgerufen werden und daher im Cache gut aufgehoben wären.Deren Größex3 ist vielleicht ein gute Anhaltspunkt für die Menge an RAM.(ggf.zzgl. Betriebssystem und sonstigen,ja..) Falls euch das noch immer nicht reicht beginnt wohl der Bereich des Load-Balancing,
Gut, dann wird es wohl um das Aufrüsten nicht herumkommen. Ist ja auch mal ein schönes Spielzeug, solch eine Kiste mit 2 Prozessoren und VIEL RAM ;) -- mit freundlichen Grüßen, Stephan Chudowski Maßmannstraße 100A 18057 Rostock Tel.: 0381 / 201 43 03 Funk: 0179 / 463 91 34 kuddel@mv-spion.de http://www.mv-spion.de
Hallo Stephan, hallo Leute, Am Donnerstag, 24. November 2005 18:01 schrieb Stephan Chudowski:
Am Do November 24 2005 17:23 schrieb Andreas Kern:
Wieviele Verbindungen habt ihr denn zu den Spitzenzeiten jede Sekunde,das der Rechner nicht mehr nachkommt?
Naja, dort sind zu den Hauptlastzeiten im Moment gut 600 Personen gleichzeitig online, die sich durch Single-Profile durchklicken wie wahnsinnig ;) . Es sind dynamische Seiten, PHP-generiert.
Auch wenn Du nicht glaubst, dass es an PHP liegt: Habt Ihr schon mal eAccelerator getestet? http://eaccelerators.sf.net Siehe dazu auch http://blog.koehntopp.de und darin der Artikel "S9Y Tuning" vom 20.5.2005. Sorry, keine Direkt-URL, aber es gibt dort eine Suche, das Stichwort "eAccelerator" sollte treffen ;-) Ach ja: Falls sich die Seiten eher selten ändern, kannst Du auch einen Abzug per wget -r machen und den ins DocumentRoot werfen *g*
Die DB liegt schon auf einem zweiten Server, das ist es also sicher nicht.
Dann muss aber auch die Netzwerk-Anbindung stimmen - eine langsame Leitung könnte IMHO das Ganze noch ausbremsen. Kann ich davon ausgehen, dass Ihr spasseshalber mal mit einer lokalen Datenbank getestet habt? Im Übrigen würde ich, falls möglich, eher die komplette Last auf 2 Server verteilen als einen getrennten Datenbank-Server vorzuhalten. Um das mit Gewissheit sagen zu können, müsste man allerdings genaueres über die Auslastung des jeweiligen Systems wissen.
Ich denke,hier ist es für euch wichtiger herauszufinden,was zu lange dauert.Wenn es viele dynamische Seiten sind,könnten die PHP-Skripte zu langsam sein,vielleicht ist php auch generell nicht schnell genug.Oder cgi/perl bremsen die Auslieferung.
PHP scheint nicht der Hänger zu sein, eher der Apache.
Dann guck mal die Apache-Einstellungen durch, insbesondere die Einstellungen zur maximal erlaubten Prozessanzahl. Idealerweise sollten die Prozesse alle in den RAM passen - dazu einfach die durchschnittliche Größe je Apache-Prozess ermitteln und die entsprechende Anzahl einstellen. Default-Werte aus SUSE 10.0 (/etc/apache2/server-tuning.conf) - natürlich auf Deine Verhältnisse anzupassen, zumindest kennst Du jetzt die entsprechenden Config-Optionen ;-) # prefork MPM <IfModule prefork.c> # number of server processes to start StartServers 5 # minimum number of server processes which are kept spare MinSpareServers 5 # maximum number of server processes which are kept spare MaxSpareServers 10 # highest possible MaxClients setting for the lifetime of the Apache # process. ServerLimit 150 # maximum number of server processes allowed to start MaxClients 150 # maximum number of requests a server process serves MaxRequestsPerChild 0 </IfModule> Guck auch mal auf http://kris.koehntopp.de/artikel/webtune/ vorbei ;-)
Möglicherweise ist auch die Datenbank zu langsam mit den Antworten.
Nein, das ist es auch nicht, das erfolgt alles im Millisekundenbereich und ist damit definitiv okay ;)
Wenn Du das sagst ;-)
Könnte das Problem nicht eher dadurch behoben werden?Bzw. durch andere Einstellungen beim Apache (insbesondere mod_cache)?
Werden wir uns mal anschauen.
Jepp. Caching jeglicher Art ist immer gut ;-) Neben mod_cache gibt es übrigens noch die (alternative) Möglichkeit, einen Reverse Proxy einzusetzen ;-) Ach ja, auch innerhalb der PHP-Scripte kann Caching sinnvoll sein - es erspart Dir u. U. (abhängig vom Script) etliche Datenbank-Abfragen. Gruß Christian Boltz -- Nicht das ich frei von Paranoia Schueben waere ;), aber wenn Dir das passiert spiel sofort Lotto, bei dem Glueck bekommst Du bestimmt 4 Wochen den 6er mit Superzahl. [Maik Holtkamp in suse-linux]
Am Fr November 25 2005 00:10 schrieb Christian Boltz:
"eAccelerator" sollte treffen ;-)
ist bereits installiert
Ach ja: Falls sich die Seiten eher selten ändern, kannst Du auch einen Abzug per wget -r machen und den ins DocumentRoot werfen *g*
muha, die Idee sollte prämiert werden ;P
Die DB liegt schon auf einem zweiten Server, das ist es also sicher nicht.
Dann muss aber auch die Netzwerk-Anbindung stimmen - eine langsame Leitung könnte IMHO das Ganze noch ausbremsen. Kann ich davon ausgehen, dass Ihr spasseshalber mal mit einer lokalen Datenbank getestet habt?
Die DB ist seit 4 Wochen auf dem 2. Server, was uns schon eine Performancesteigerung um mehr als 150 % eingebracht hat. Als die DB und der Apache auf dem selben Rechner liefen, war bei 300 Nutzern Ende. Die Datenbank liegt natürlich auch lokal (also hier bei mir) vor und spuckt im Bruchteil von Millisekunden aus. Indizes etc. sind da schon gut gesetzt, das funktioniert mit MySQL 5 hervorragend gut.
Im Übrigen würde ich, falls möglich, eher die komplette Last auf 2 Server verteilen als einen getrennten Datenbank-Server vorzuhalten. Um das mit Gewissheit sagen zu können, müsste man allerdings genaueres über die Auslastung des jeweiligen Systems wissen.
Ist eine Kostenfrage. Ein Loadbalancer kostet monatlich ab 500 EUR aufwärts, dazu kommt dann noch einiges anderes an Kosten... Ein Telefonat mit dem Betreiber der Fotocommunity hat mich da auch noch ein wenig weitergebracht in die Richtung, bei denen schaut es so aus: http://www.fotocommunity.de/info/Über_die_fotocommunity_Technik
# prefork MPM <IfModule prefork.c> # number of server processes to start StartServers 5 # minimum number of server processes which are kept spare MinSpareServers 5 # maximum number of server processes which are kept spare MaxSpareServers 10 # highest possible MaxClients setting for the lifetime of the Apache # process. ServerLimit 150 # maximum number of server processes allowed to start MaxClients 150 # maximum number of requests a server process serves MaxRequestsPerChild 0 </IfModule>
Ist schon alles ziemlich optimiert und stark nach oben gesetzt. Mit den 'Defaults' wäre die jetzige Leistung gar nicht möglich, dann würden uns die User die Bude einrennen.. Zumal dann enorm viele Anfragen einfach in der Warteschlange verenden würden..
Guck auch mal auf http://kris.koehntopp.de/artikel/webtune/ vorbei ;-)
Wird wohl die Sonntagslektüre werden ;)
Ach ja, auch innerhalb der PHP-Scripte kann Caching sinnvoll sein - es erspart Dir u. U. (abhängig vom Script) etliche Datenbank-Abfragen.
Ist leider nicht drin, da sich die Seiten wirklich mit jedem Aufruf ändern.. Vielen dank an alle für die Hinweise, ich werd noch n bissl was lesen, aber am Ende wird es um das große Spielzeug wohl nicht herumkommen.. -- mit freundlichen Grüßen, Stephan Chudowski Maßmannstraße 100A 18057 Rostock Tel.: 0381 / 201 43 03 Funk: 0179 / 463 91 34 kuddel@mv-spion.de http://www.mv-spion.de
Hallo Stephan, hallo Leute, Am Samstag, 26. November 2005 14:03 schrieb Stephan Chudowski:
Am Fr November 25 2005 00:10 schrieb Christian Boltz:
Ach ja: Falls sich die Seiten eher selten ändern, kannst Du auch einen Abzug per wget -r machen und den ins DocumentRoot werfen *g*
muha, die Idee sollte prämiert werden ;P
Naja, je nach Anwendungsfall... *g*
Die DB liegt schon auf einem zweiten Server, das ist es also sicher nicht.
Dann muss aber auch die Netzwerk-Anbindung stimmen - eine langsame Leitung könnte IMHO das Ganze noch ausbremsen. Kann ich davon ausgehen, dass Ihr spasseshalber mal mit einer lokalen Datenbank getestet habt?
Die DB ist seit 4 Wochen auf dem 2. Server, was uns schon eine Performancesteigerung um mehr als 150 % eingebracht hat. Als die DB und der Apache auf dem selben Rechner liefen, war bei 300 Nutzern Ende.
Das hört sich nach RAM-Mangel auf dem ersten Server an ;-)
Im Übrigen würde ich, falls möglich, eher die komplette Last auf 2 Server verteilen als einen getrennten Datenbank-Server vorzuhalten. Um das mit Gewissheit sagen zu können, müsste man allerdings genaueres über die Auslastung des jeweiligen Systems wissen.
Ist eine Kostenfrage. Ein Loadbalancer kostet monatlich ab 500 EUR aufwärts, dazu kommt dann noch einiges anderes an Kosten...
Blöde Frage: Kannst Du einfach 2 IPs im Nameserver eintragen (lassen)? Das ist dann zwar kein ausgewachsenes Loadbalancing, sollte aber denselben Zweck erfüllen. [...]
# maximum number of server processes allowed to start MaxClients 150
[...] Ist schon alles ziemlich optimiert und stark nach oben gesetzt.
Da der Server sich irgendwann "totswappt", vermute ich stark, dass die Werte *zu hoch* sitzen. Ja, kurzfristig hält das die Warteschlange leer. Langfristig füllt es Dir aber den swap und macht die Warteschlange durch die vergrößerten Antwortzeiten deutlich länger...
Guck auch mal auf http://kris.koehntopp.de/artikel/webtune/ vorbei ;-)
Wird wohl die Sonntagslektüre werden ;)
Dann mal viel Spaß. Anschließend drehst Du dann die MaxClients wieder etwas runter, versprochen? ;-)
Ach ja, auch innerhalb der PHP-Scripte kann Caching sinnvoll sein - es erspart Dir u. U. (abhängig vom Script) etliche Datenbank-Abfragen.
Ist leider nicht drin, da sich die Seiten wirklich mit jedem Aufruf ändern..
Dann solltest Du versuchen, zumindest Teile der Seite zu cachen. Und zwar möglichst nahe am Ausgabeformat, also als fertige HTML-Blöcke. Auch hierzu hat sich Kris Köhntopp schon ausgetobt [1] - eine Suche nach "Cache" oder "Caching" auf blog.koehntopp.de sollte helfen. Oder Du guckst gleich die komplette Kategorie "PHP" durch ;-) Gruß Christian Boltz [1] oft im Zusammenhang mit s9y, das stört aber nicht ;-) -- Den ganzen Prozess zusammengenommen nennt man "Branding": Man nimmt ein glühendes Eisen mit der neuen Ausdrucksform und drückt sie der Firma kräftig drauf - und die reagiert wie ein Rindviech. :-) [Ratti]
Am Samstag, 26. November 2005 14:03 schrieb Stephan Chudowski:
Ist eine Kostenfrage. Ein Loadbalancer kostet monatlich ab 500 EUR mit freundlichen Grüßen, Stephan Chudowski
Hallo :-) Du installierst die Apaches auf beiden Servern und 1 Datenbank Backend, dann reicht es schon im DNS auf die www Adresse beide IP Adressen als A Record einzutragen und die werden dann abwechselnd ausgeliefert sprich die Clients auf die beiden Server verteilt. Gruss Martin -- Heuristics are bug ridden by definition. If they didn't have bugs, then they'd be algorithms.
participants (4)
-
Andreas Kern
-
Christian Boltz
-
Martin Heuser
-
Stephan Chudowski