PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache bzw. PHP zum cachen der Dateien zwingen?



NeWsOfTzzz
27.09.07, 14:06
Wie ich hier beschrieben habe:
http://www.linuxforen.de/forums/showthread.php?t=242133
sind virtuelle Rootserver schlecht was die Festplattenleistung angeht. Kann man den Apache bzw. das PHP Modul dazu zwingen, alle Webdateien zu cachen? Kommt bei mir zusammen gerade mal auf 1 MB und die würde ich gerne opfern!
Oder vielleicht gibt es auch andere (OpenSource) Webserver, die sich eher darauf spezialisiert haben?

totycro
28.09.07, 16:05
Es ist zwar keine sehr elegante Lösung, aber du könntest regelmäßig die Webseiten einfach auslesen lassen, zum Beispiel mithilfe eines cronjobs, dann sollten sie beim nächsten Laden aus dem RAM genommen werden.

So in etwa:

find /var/www -type f -exec cat "{}" >/dev/null \;

NeWsOfTzzz
28.09.07, 17:46
Dein Befehl benutzt die Dateien sozusagen (verschmelzt) und schreibt das Ergebnis ins nichts. Aber wieso sollte Apache dann die Datei im Speicher benutzen? Zumal sie doch eigentlich nach der Ausführung von cat wieder ausm Speicher raus sein sollte oder?

PierreS
28.09.07, 17:52
Sie bleiben so im FS-Cache. Für PHP-Dateien sollte ein OpCode-Cache wie APC oder XCache sehr viel bringen.

Allerdings glaube ich kaum, daß Deine Geschwindigkeitsprobleme an Festplattenzugriffen liegen. Wenn das eh nur wenige MB sind, solle Linux das eh im RAM halten. Wahrscheinlicher ist da schon, daß der RAM zu klein oder CPU zu langsam sind. (kann sogar am Netzwerk liegen) Wenns also mal wieder länger dauert: Beobachte den Rechner mit htop etc..

NeWsOfTzzz
29.09.07, 14:21
Ich mal den eAccelerator, is ne Abkopplung vom ursprünglich schnellsten Optimiersystem für PHP, dessen Entwickler allerdings zur "PHP Company" gewechselt ist. Von daher sollte die weiterentwickelte Abkopplung die beste Wahl sein.
PS: Es liegt definitiv an der Festplatte. Ich würde es nicht einfach so behaupten wenn ich es nicht nachgeprüft hab. Die einzige andere Möglichkeit wäre, dass der virtuelle Server mich verarscht und falsche Ressourcen anzeigt (wer weiß was die hoster da eingestellt haben). Netzwerkkarte wäre theoretisch auch ne Möglichkeit. Aber die Pings sagen da was anderes. Aber ich werd die Netzwerkkarte beim nächsten mal genauer durchchecken...

PS: Ich muss mich nochmal bedanken, dass ihr mir hier sachlich helft.. Ist hier nicht immer so aufm Board :)
Gibt viele Leute mit ner elitären Einstellung hier..

marce
29.09.07, 16:58
Darf man fragen, wie Du darauf kommst, dass es die HD ist? Wie bereits erwähnt - bei Umfang von wenigen MB ist der Source-Code auf jeden Fall im Speicher vorhanden, es kommt also auf die reine Interpreationszeit an. Und die ist unabhängig von der HD. Wenn Du da also hohe IO-Waits hast, ist der Fehler ziemlich sicher wo anders zu suchen... Ausserdem ist ein Accellerator nicht bei jedem System sinnvoll...

NeWsOfTzzz
29.09.07, 17:53
CPU Auslastung = 0-1%
RAM= 100~/1024 MB

Und es ist definitiv die Festplatte, weil ich z.B. beim Kompilieren ähnliche Geschwindigkeitsschwankungen habe.. Gut das könnte auch an der CPU liegen. Aber wenn ich mein selbstgeschriebene Serverapplikation starte, dann sehe ich, wieviel Zeit er für welchen Punkt braucht, und dann kann man bei 2 Punkten, die bestimmte Daten von der Festplatte laden, extrem hohe Zeiten sehen (Im Vergleich zu den Zeiten auf meinem PC), während alle anderen Sachen, wie z.B. auch das Laden von Daten aus einer externen Datenbank, so schnell wie auf meinem PC ablaufen.

Die Webseite besteht ja nur aus PHP und so weit ich weiß, liest Apache die PHP Dateien bei jedem Seitenaufruf neu ein. Da würde ja dann der eAccelerator z.B. helfen, da er die PHP Dateien kompiliert und im RAM speichert.

Zu dem Filesystem Cache, muss ich sagen, wusste ich gar nicht, dass Linux so etwas hat. Vielleicht ist der bei mir ausgeschaltet? Kann man das irgendwie nachprüfen?

MiGo
29.09.07, 23:12
bei 2 Punkten, die bestimmte Daten von der Festplatte laden, extrem hohe Zeiten sehen
[....]

Die Webseite besteht ja nur aus PHP und so weit ich weiß, liest Apache die PHP Dateien bei jedem Seitenaufruf neu ein.

Auch die Daten werden - egal wie - neu eingelesen. Die könnten sich ja zwischenzeitlich geändert haben.

Wenn die also mitgecached werden sollen, musst du sie leider als statisches Array in das php-File packen :)

(Wenn du allerdings keine externen Daten meinst, dann muss das so antürlich nicht stimmen - dein letzter Post ist an Präzision fast nicht zu unterbieten :))

NeWsOfTzzz
29.09.07, 23:33
Ich sagte selbstgeschriebene Serverapplikation und damit meinte ich eine Serverapplikation in C++ und unabhängig von Apache. Meine Serverapplikation (um es genauer zu definieren ein MMORPG Server, der am Anfang Karte und Monsterdateien einliest) und der Apache laufen beide auf diesem Server. Bei dem MMORPG Server ist das letztlich egal, da er die nur am Start einliest und danach im RAM speichert => für die Nutzer nicht zu bemerken.
Nur mit der Webseite ist es extrem schlecht wenn die manchmal 10-20 Sekunden lädt :(
Und ich hab dann sogar F5 gedrückt und die hat WIEDER 10 Sekunden geladen!! Also anscheinend cached Apache die nicht mal 1 Minute die Dateien O.o
PS: Fremdeinflüsse sind auszuschließen da beides noch testweise läuft und noch keine wirklichen Besucher/Spieler vorhanden sind.

marce
30.09.07, 00:02
Also mal ehrlich: solche Ladezeiten lassen auf eine massive Fehlkonfiguration schliessen...

NeWsOfTzzz
30.09.07, 02:23
was für eine fehlkonfiguration -.-
virtueller server und mehrere leute greifen gleichzeitig auf die festplatte zu -.-

Das steigt ja nicht linear sondern exponential:
1 festplattenzugriff = 100%
2 festplattenzugriffe = 25%
3 festplattenzugriffe = 10%
4 festplattenzugriffe = 3%

Also die genauen Werte weiß ich natürlich nicht aber ich denke mal das kommt hin..

BedriddenTech
30.09.07, 02:35
Wie berechnest du diese Prozentwerte, und wofür stehen sie?

NeWsOfTzzz
30.09.07, 02:44
Zugriffszeiten, Übertragungsgeschwindigkeit.. 100% wäre einfach volle Geschwindigkeit. Und wie gesagt berechne ich die nicht, das sind Schätzungen, die allerdings auch auf einer Festplatte ohne Native Command Queue basieren.
Und wie soll es denn bitte schön eine Fehlkonfiguration sein, wenn manchmal der Server gut läuft und die Seite dann z.B. in unter 100ms komplett geladen ist und dann an anderen Zeiten so schlecht läuft.. Obwohl ich ja wohl gemerkt die einzige Person auf der Webseite bin.. Kann es doch nur an den anderen virtuellen Servern liegen, die auch noch auf dem physischen Server sind und hin und wieder deftig die HDD blockieren..

marce
30.09.07, 09:55
Poste doch einfach konkrete Beispiele und Fakten (top, vmstat, free, lsof, Logs, ...) - mit gefühlten Werten kann man so leider nichts anfangen...

NeWsOfTzzz
30.09.07, 15:06
Die oben genannte CPU Auslastung und RAM Verbrauch sind Werte von htop..
Nur die Festplattenwerte für mehrere gleichzeitgige Zugriffe sind geschätzt weil man dafür ja einen Benchmark bräuchte.. Und jetzt extra nen Benchmark zu installieren dafür, dass ich ja sowieso weiß, dass es die Festplatte ist..
Und wenn man es genau sieht hab ich einen Benchmark für die Festplatte und das ist meine selbst geschriebene Serverapplikation die zu schlechten Zeiten das 30-fache an Zeit braucht um Daten von der Festplatte zu lesen verglichen mit den Normalzeiten.
Jetzt läuft der Server z.B. gut und ich brauche für die Karte auf dem Server 0.5 Sekunden.
In "schlechten Zeiten", also wenn viele auf die Festplatte zugreifen, brauchte er glaube ich 8 Sekunde oder mehr. Ich werd's nochmal nachprüfen.
Und generell ist halt alles langsamer zu solchen Zeiten: Kompilieren, der Apache und selbst jeder SSH Befehl braucht merkbar länger dann!

PierreS
30.09.07, 15:13
Ich könnte mir eher vorstellen, daß dann die Host-CPU einfach überlastet ist; oder der RAM knapp wird und ausgelagert werden muß. Das kannst Du im Gast allerdings nicht "sehen".

NeWsOfTzzz
30.09.07, 16:47
Wenn die Host CPU überlastet wäre oder der RAM knapp ist dann wäre das Betrug, da mir ausdrücklich 1,5 GHZ und 1024 MB RAM zugesichert sind!
Wenn allerdings die CPU oder RAM knapp "WÄRE", warum gehen dann alle anderen Sachen, die nicht Festplattenabhängig sind, also z.B. das Laden der Daten von einer externen Datenbank, mit meiner Serverapplikation genauso schnell wie sonst auch? Kann ja dann nicht sein!

solarix
30.09.07, 20:33
Die oben genannte CPU Auslastung und RAM Verbrauch sind Werte von htop..
Nur die Festplattenwerte für mehrere gleichzeitgige Zugriffe sind geschätzt


Tja schätzen bringts nicht wirklich....


weil man dafür ja einen Benchmark bräuchte.. Und jetzt extra nen Benchmark zu installieren dafür, dass ich ja sowieso weiß, dass es die Festplatte ist..


Schätzen heisst nichts wissen. Du gehst das Problem falsch an.

man iostat
man vmstat
man lsof

hilft Dir weiter. Des weiteren würde es mit Sicherheit Sinn machen wenn die Werte von iostat und vmstat auf nichts verdächtiges hinweisen mal einen truss abzusetzen.

An den Werte von iostat und vmstat solltest Du ziemlich schnell sehen ob der Flaschenhals wirklich die Platte ist. Aber ohne das "anwenden" dieser Tools kannst Du lange spekulieren und "fühlen"
Bevor Du das nicht gemacht hast lohnt es sich absolut nicht noch länger rum zu mäkeln.

Oh ich vergas der Fehler liegt ja nicht bei Dir.

EDIT:
Vserver müssen nicht schlecht sein aber es ist eben auch so, you get what you payd for.