Oprimale Performance (Apache PHP MySQL Squid)
Oprimale Performance (Apache PHP MySQL Squid)
Hallo,
erstmal vorweg - ist ja ein echt nettes Board hier auf das ich gestolpert bin mit vielen Infos, werde wohl öfter hier vorbei schauen =)
Also jetzt zu meinem Anliegen.
Ich habe eine "Webpräsenz" die über ein CMS ähnliches System was auf PHP und MySQL basiert seine Seiten ausgibt.
Da das ganze aber knapp 1ne Millionen Seiten beinhaltet und auf dem System gut Zugriffe sind (derzeit ca. 200.000 PI + Robot zugriffe am Tag), habe ich davor einen Reverse Squid Proxy geschaltet.
Diesem Reverse Proxy wird mitgeteilt, dass er die Seiten 7 Tage im Cache halten soll...
Das ganze läuft neben ein paar anderen Projekten mit auf einem 2,0 Ghz Celeron Rechner mit 512 MB Ram.
Da das ganze in Zuckunft warscheinlich noch stark ansteigen wird (ca 1Mio PI am Tag) und der Rechner jetzt schon ganz schön am Rödeln ist (der Squid kommt ganz gut klar - aber wenn halt mehrere Refresh Anfragen auf einmal kommen, kann es da schon zu Problemen kommen...)
werde ich für das Projekt einen eigenen Server aufsetzen (3GHz P4 / 2 GB Ram).
Da ich das Optimum an Leistung für das Projekt mit noch ein paar ressourcen nach oben aus dem Rechner rausholen wollte, wollte ich mal fragen was für eine Configuration ihr mir empfehlen würdet (Apache, PHP, Mysql, Squid)
Vielen Dank schonmal für eure Antworten, falls noch Infos benötigt werden die ich vergessen habe einfach fragen..
Mit besten Grüßen
Michael
erstmal vorweg - ist ja ein echt nettes Board hier auf das ich gestolpert bin mit vielen Infos, werde wohl öfter hier vorbei schauen =)
Also jetzt zu meinem Anliegen.
Ich habe eine "Webpräsenz" die über ein CMS ähnliches System was auf PHP und MySQL basiert seine Seiten ausgibt.
Da das ganze aber knapp 1ne Millionen Seiten beinhaltet und auf dem System gut Zugriffe sind (derzeit ca. 200.000 PI + Robot zugriffe am Tag), habe ich davor einen Reverse Squid Proxy geschaltet.
Diesem Reverse Proxy wird mitgeteilt, dass er die Seiten 7 Tage im Cache halten soll...
Das ganze läuft neben ein paar anderen Projekten mit auf einem 2,0 Ghz Celeron Rechner mit 512 MB Ram.
Da das ganze in Zuckunft warscheinlich noch stark ansteigen wird (ca 1Mio PI am Tag) und der Rechner jetzt schon ganz schön am Rödeln ist (der Squid kommt ganz gut klar - aber wenn halt mehrere Refresh Anfragen auf einmal kommen, kann es da schon zu Problemen kommen...)
werde ich für das Projekt einen eigenen Server aufsetzen (3GHz P4 / 2 GB Ram).
Da ich das Optimum an Leistung für das Projekt mit noch ein paar ressourcen nach oben aus dem Rechner rausholen wollte, wollte ich mal fragen was für eine Configuration ihr mir empfehlen würdet (Apache, PHP, Mysql, Squid)
Vielen Dank schonmal für eure Antworten, falls noch Infos benötigt werden die ich vergessen habe einfach fragen..
Mit besten Grüßen
Michael
-
alexander newald
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
- Contact:
Re: Oprimale Performance (Apache PHP MySQL Squid)
Squid auf einen eigenen Rechner auslagern dürfte schon sehr viel bringen
Re: Oprimale Performance (Apache PHP MySQL Squid)
Wieso ausgerechnet Squid? Meiner Erfahrung nach ist Squid in so einem Szenario (PHP/MySQL), eher derjenige der am wenigsten zu tun hat. Kommt natürlich sehr auf die Anwendungen an...
Für PHP sollte man auf jeden Fall einen Opcode-Cache wie eAccelerator oder PEAR::APC verwenden! Dann eine möglichst aktuelle MySQL-Version mit Query-Cache, und auch auf PHP-Ebene Cachen, nach Möglichkeit im RAM.
Was ich sonst noch empfehlen kann, ist mal einen Blick auf lighttpd zu werfen. Das ist ein schön schlanker, performanter Webserver (verbraucht vor allem erheblich weniger Speicher), der über FastCGI auf "persistente PHP-Prozesse" zugreifen kann. Hat nebenbei auch den Vorteil, dass man bei Bedarf einen oder mehrere der PHP-Prozesse ganz einfach auf andere Maschinen auslagern kann. Abgesehen davon gilt diese Variante auch als performanter als Apache+mod_php, bietet aber dem gegenüber die Möglichkeit PHP mit anderen Rechten auszuführen als den Webserver. lighttpd läuft auch vergleichsweise einfach in einem chroot. Ich habe damit bisher sehr gute Erfahrungen gemacht. Ist auch eine sehr aktive Entwicklung.
Bemerkenswert finde ich die rasante Zunahme des lighttpd auf öffentlichen Servern:
http://www.netcraft.com/Survey/Reports/0503/
Für PHP sollte man auf jeden Fall einen Opcode-Cache wie eAccelerator oder PEAR::APC verwenden! Dann eine möglichst aktuelle MySQL-Version mit Query-Cache, und auch auf PHP-Ebene Cachen, nach Möglichkeit im RAM.
Was ich sonst noch empfehlen kann, ist mal einen Blick auf lighttpd zu werfen. Das ist ein schön schlanker, performanter Webserver (verbraucht vor allem erheblich weniger Speicher), der über FastCGI auf "persistente PHP-Prozesse" zugreifen kann. Hat nebenbei auch den Vorteil, dass man bei Bedarf einen oder mehrere der PHP-Prozesse ganz einfach auf andere Maschinen auslagern kann. Abgesehen davon gilt diese Variante auch als performanter als Apache+mod_php, bietet aber dem gegenüber die Möglichkeit PHP mit anderen Rechten auszuführen als den Webserver. lighttpd läuft auch vergleichsweise einfach in einem chroot. Ich habe damit bisher sehr gute Erfahrungen gemacht. Ist auch eine sehr aktive Entwicklung.
http://thread.gmane.org/gmane.comp.web.lighttpd/1188 (die darin beschriebenen Probleme bezogen sich nur auf FreeBSD und sind in der aktuellen Version AFAIK behoben).We've
had hundreds of comments that the site is faster now, and lots of happy
users. We saw a bigger jump from lighttpd->apache than we saw from a
PIII/850M to a P4/3.06G
Bemerkenswert finde ich die rasante Zunahme des lighttpd auf öffentlichen Servern:
Code: Select all
aktuell: 508 + 229
Feb 05: 279 + 98
Jan 05: 181 + 45
Dec 04: 136 + 25
Nov 04: 111 + 34
Oct 04: 87 + 33
Sep 04: 54 + 23
Aug 04: 31 + 6
Jul 04: 25 + 25
Jun 04: 0
Last edited by andreask2 on 2005-03-03 16:59, edited 1 time in total.
Re: Oprimale Performance (Apache PHP MySQL Squid)
Wenn du den Rechner "für dich allein" hast, kannst du, wenn du aus irgend einem Grund willst, mod_php mit Apache(2) nehmen. Nach meinen Erfahrungen kann man jetzt schon ruhig den Apache2 nehmen, da es alle wichtigen Module für den Apache2 schon gibt und er auch schon sehr stabil läuft. Die Möglichkeiten zur Konfiguration sind höher und wenn es kein absolut hochverfügbares System sein soll, dann hat Apache2 wirklich Vorteile.
Zumindestens auf einem System, dass sich mehrere User teilen (Stichwort Hosting) würde ich auf jeden Fall FastCGI+PHP verwenden, auch bei "normalen" Servern solltest du diese Möglichkeit in Betracht ziehen. Ich selbst verwende Apache2+FastCGI+suexec2+php5 und bin damit zufrieden. Von Apache möchte ich mich aber nicht verabschieden, dafür sind mir die Konfiguration einfach zu praktisch und die Möglichkeiten zu groß.
Für MySQL kann ich dir nicht viel empfehlen, MySQL 4.1.
Zu Squid kann ich auch wenig sagen, außer, dass ich eAccelerator oder vergleichbares verwenden würde. (Cache für PHP, nicht für die Seiten)
Aule
Zumindestens auf einem System, dass sich mehrere User teilen (Stichwort Hosting) würde ich auf jeden Fall FastCGI+PHP verwenden, auch bei "normalen" Servern solltest du diese Möglichkeit in Betracht ziehen. Ich selbst verwende Apache2+FastCGI+suexec2+php5 und bin damit zufrieden. Von Apache möchte ich mich aber nicht verabschieden, dafür sind mir die Konfiguration einfach zu praktisch und die Möglichkeiten zu groß.
Für MySQL kann ich dir nicht viel empfehlen, MySQL 4.1.
Zu Squid kann ich auch wenig sagen, außer, dass ich eAccelerator oder vergleichbares verwenden würde. (Cache für PHP, nicht für die Seiten)
Aule
Last edited by aule on 2005-03-03 17:08, edited 1 time in total.
-
alexander newald
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
- Contact:
Re: Oprimale Performance (Apache PHP MySQL Squid)
Squid verwendet nach langer Laufzeit viel Ram und macht bei der grossen Anzahl von Seitenzugriffen sicher den grössten Anteil an Plattenzugriffen aus. Daher meine Empfehlung Squid auf einen Server mit viel Ram auszulagern und dort Squid so einzustellen, dass er allen Ram verwenden kann und möglichst viele Dateien im Ram halten kann.
Das macht nur dann Sinn, wenn sich die PHP Seiten relativ selten verändern und somit Squid die Dateien ausliefert. Aber das ist ja hier anscheinend der Fall.
Das macht nur dann Sinn, wenn sich die PHP Seiten relativ selten verändern und somit Squid die Dateien ausliefert. Aber das ist ja hier anscheinend der Fall.
Re: Oprimale Performance (Apache PHP MySQL Squid)
Wird in betracht gezogen, aber derzeit ist nur in Planung einen Rechner einzusetzen...Squid auf einen eigenen Rechner auslagern dürfte schon sehr viel bringen
Ã?ähh =)Wieso ausgerechnet Squid? Meiner Erfahrung nach ist Squid in so einem Szenario (PHP/MySQL), eher derjenige der am wenigsten zu tun hat. Kommt natürlich sehr auf die Anwendungen an...
Naja, Squid hat schon ganz gut zu tun.. moment...
ist aus Top rauskopiert...28442 proxy 11 0 112m 70m 68m S 1.3 14.1 135:06.16 squid
Naja, es gibt glaube ich auch von Apache so ein Proxy Modul, wenn ich mich nicht irre?
Ja, stimmt, wollte ich auch mit rein nehmen =)Für PHP sollte man auf jeden Fall einen Opcode-Cache wie eAccelerator oder PEAR::APC verwenden!
Da hab ich mal eine Frage - wie genau funktioniert dieser Query Cache?Dann eine möglichst aktuelle MySQL-Version mit Query-Cache, und auch auf PHP-Ebene Cachen, nach Möglichkeit im RAM.
Im endeffekt stelle ich mir das so vor, dass für immer wieder auftretende anfragen die ergebnisse zwischengespeichert werden?
Macht das dann noch sinn, wenn ein großteil der Anfragen unterschiedlich sind (wie gesagt, dass sind ~1Mio unterschiedliche Seiten dementsprechend auch jedes mal andere Anfragen...)
Danke, werde ich mir mal genauer anschauen. Es gibt aber ein paar Sachen auf die ich nicht verzichten kann / möchte (z.B. Mod_rewrite)...Was ich sonst noch empfehlen kann, ist mal einen Blick auf lighttpd zu werfen.
Vielen Dank für die Infos schonmal...
Wie würdet ihr den Arbeitsspeicher verteilen?
Beste Grüße
Michael
Re: Oprimale Performance (Apache PHP MySQL Squid)
Ja, der Rechner ist für "mich alleine" nzw. ganz alleine für dieses eine Projekt gedacht...Wenn du den Rechner "für dich allein" hast
Also lieber Apache 2 + PHP 5 verwenden?
Derzeit verwende ich Apache 1.3.33 + PHP5, da sich das von Debian aus per RPM ohne eingriffe installieren lässt...
Apropos eAccelerator - da hatte ich bei meinem letzten versuch leichte Probleme mit php5 und habs deswegen erstmal gelassen, gibts da irgendwo ein howto zu?
Ja, die verändern sich nur sehr selten - werde warscheilich die Caching zeit auch hochsetzen...Das macht nur dann Sinn, wenn sich die PHP Seiten relativ selten verändern und somit Squid die Dateien ausliefert. Aber das ist ja hier anscheinend der Fall.
Also meine letzte Frage bzgl. Speicher hat sich wohl erledigt.Squid verwendet nach langer Laufzeit viel Ram und macht bei der grossen Anzahl von Seitenzugriffen sicher den grössten Anteil an Plattenzugriffen aus. Daher meine Empfehlung Squid auf einen Server mit viel Ram auszulagern und dort Squid so einzustellen, dass er allen Ram verwenden kann und möglichst viele Dateien im Ram halten kann.
Wie gesagt der Rechner hat 2 GB Arbeitsspeicher und ich würde zumindest vorerst nur mit einem Rechner arbeiten - dass kann man ja falls es zu Performance Problemen kommt recht einach ändern...
Also einfach 1GB Arbeitsspeicher für den Squid reservieren?
Tnx =)
Michael
Re: Oprimale Performance (Apache PHP MySQL Squid)
Hm, so viel finde ich das ehrlich gesagt nicht ;-) Aber ist ja auch nur eine Momentaufnahme. Wenn Du jetzt den RAM ver-4-fachst sieht das zumindest bei diesen Zahlen doch recht entspannt aus.samtpfote wrote:ist aus Top rauskopiert...28442 proxy 11 0 112m 70m 68m S 1.3 14.1 135:06.16 squid
Ja, mod_proxy, allerdings ist squid für diesen Einsatz-Zweck IMHO besser optimiert. mod_proxy ist etwas einfacher einzurichten, finde ich.samtpfote wrote:Naja, es gibt glaube ich auch von Apache so ein Proxy Modul, wenn ich mich nicht irre?
Hm, ist schwer zu sagen ohne Einzelheiten zu kennen. Natürlich hast Du einen besseren Effekt wenn Du wenige gleiche Abfragen hast. trotzdem werdne sich die Seitenaufrufe doch nicht gleichmäßig verteilen, so könnte es z.B. sein dass wenige Seiten die sehr oft aufgerufen gecached werden, oder Abfragen die bei jedem request gemacht werden...samtpfote wrote: Da hab ich mal eine Frage - wie genau funktioniert dieser Query Cache?
Im endeffekt stelle ich mir das so vor, dass für immer wieder auftretende anfragen die ergebnisse zwischengespeichert werden?
Macht das dann noch sinn, wenn ein großteil der Anfragen unterschiedlich sind (wie gesagt, dass sind ~1Mio unterschiedliche Seiten dementsprechend auch jedes mal andere Anfragen...)
Du kannst das ja mal messen, bei 2GB Ram sollten wohl ein paar MB für einen query-cache drin sein, oder? ;-)
Wenn Ihr nicht auf MySQL festgelegt seid macht es vielleicht auch mal Sinn sich andere DBs anzusehen, z.B. PostgreSQL verbraucht deutlich weniger Ram als MySQL und ist von der Geschwindigkeit durchaus vergleichbar!
Was ich sonst noch empfehlen kann, ist mal einen Blick auf lighttpd zu werfen.
Klar, wenn man die komplexen Funktionalitäten von Apache benötigt ist das natürlich was anderes. Ich komme mit dem was lighttpd bietet meistens eigentlich sehr gut aus. lighttpd hat z.B. auch ein eigenes (primitiveres) mod_rewrite Modul: http://lighttpd.net/documentation/rewrite.htmlsamtpfote wrote:Danke, werde ich mir mal genauer anschauen. Es gibt aber ein paar Sachen auf die ich nicht verzichten kann / möchte (z.B. Mod_rewrite)...
Prinzipiell würde ich das dem Betriebssystem überlassen wollen ;-) Du musst halt der Software mehr RAM für Cache geben, wo es am meisten bringt. Da Software wie lighttpd/fcgi deutlisch sparsamer mit RAM umgeht als Apache/mod_php, hat man hier auch entsprechend mehr für Caching zur Verfügung.samtpfote wrote: Wie würdet ihr den Arbeitsspeicher verteilen?
Re: Oprimale Performance (Apache PHP MySQL Squid)
Debian und RPM?
Ich verwende auch Debian (allerdings sarge) und kann Apache2 problemlos per apt-get installieren.
Aule
Ich verwende auch Debian (allerdings sarge) und kann Apache2 problemlos per apt-get installieren.
Aule
Re: Oprimale Performance (Apache PHP MySQL Squid)
Debian und RPM?
*g* Naja, hab wohl ein wenig zuviel unter Suse gearbeitet o_O
ich mach viel mit apt-get - und da hab ich noch keine laufende verbindung von Apache2 und php5 hinbekommen - habs aber auch schon länger nicht probiert...
Werde aber auf dem neuen System durch den eAccelerator wohl das php5 kompilieren müssen...
P.S.: verzeiht meine Fehler - teilweise bin ich noch nicht ganz so firm was die Sachen und die Ausdrücke angeht...
*g* Naja, hab wohl ein wenig zuviel unter Suse gearbeitet o_O
ich mach viel mit apt-get - und da hab ich noch keine laufende verbindung von Apache2 und php5 hinbekommen - habs aber auch schon länger nicht probiert...
Werde aber auf dem neuen System durch den eAccelerator wohl das php5 kompilieren müssen...
P.S.: verzeiht meine Fehler - teilweise bin ich noch nicht ganz so firm was die Sachen und die Ausdrücke angeht...
Re: Oprimale Performance (Apache PHP MySQL Squid)
Warum das? Du kannst eAccelerator entwoeder per rpm oder dirkt aus dem Source installieren. Du muss lediglich die php.ini anpassen: http://eaccelerator.net/InstallEacceleratorUksamtpfote wrote:Werde aber auf dem neuen System durch den eAccelerator wohl das php5 kompilieren müssen...
PS: http://weblog.textdrive.com/article/26/ ... g-lighttpd
-
alexander newald
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
- Contact:
Re: Oprimale Performance (Apache PHP MySQL Squid)
mysql und query cache ist nur dann sinnvoll, wenn die Anfragen keine Daten in der Tabelle verändern, aus der sie kommen. Beispiel:
Alle Daten einer Webseite sind in einer Tabelle gespeichert, allerdings wird in der gleichen Tabelle auch der Counter für die Seitenzugriffe gespeichert. Dadurch wird zuerst die Query, dann das Ergebniss in den Cache geladen und dann alles wieder gelöscht, da sich die Tabelle (wegen dem Counter) geändert hat.
Bei Squid ist wichtig, das die Kiste nie ins Swappen kommt. Bei 2GB Ram den Swapspace ausschalten (und vorher sicherstellen, dass der Ram dann auch für den normalen Betrieb reicht)
Grundsätzlich würde ich aber immer dazu tendieren die Last auf 2 (evtl. etwas schwächere) Server aufzuteilen.
Alle Daten einer Webseite sind in einer Tabelle gespeichert, allerdings wird in der gleichen Tabelle auch der Counter für die Seitenzugriffe gespeichert. Dadurch wird zuerst die Query, dann das Ergebniss in den Cache geladen und dann alles wieder gelöscht, da sich die Tabelle (wegen dem Counter) geändert hat.
Bei Squid ist wichtig, das die Kiste nie ins Swappen kommt. Bei 2GB Ram den Swapspace ausschalten (und vorher sicherstellen, dass der Ram dann auch für den normalen Betrieb reicht)
Grundsätzlich würde ich aber immer dazu tendieren die Last auf 2 (evtl. etwas schwächere) Server aufzuteilen.
Re: Oprimale Performance (Apache PHP MySQL Squid)
Oh, danke =)Warum das? Du kannst eAccelerator entwoeder per rpm oder dirkt aus dem Source installieren. Du muss lediglich die php.ini anpassen: http://eaccelerator.net/InstallEacceleratorUk
Funktioniert das auch unter php5?
Das ist der Fall, Inhalte der Tabelle werden selten verändert...mysql und query cache ist nur dann sinnvoll, wenn die Anfragen keine Daten in der Tabelle verändern, aus der sie kommen.
Re: Oprimale Performance (Apache PHP MySQL Squid)
Ich hab es per emerge (Gentoo) installiert, das macht unterm Strich auch nichts anderes als vom original Source zu installieren.samtpfote wrote:Oh, danke =)Warum das? Du kannst eAccelerator entweder per rpm oder dirkt aus dem Source installieren. Du muss lediglich die php.ini anpassen: http://eaccelerator.net/InstallEacceleratorUk
Funktioniert das auch unter php5?