Drupal System optimieren/schneller machen
am 22.12.2008 - 17:35 Uhr in
Salü,
Ich wußte jetzt nicht genau welche Kategorie ich nehmen sollte, also wenn es nicht passt, bitte verschieben.
Ich bin jetzt mit meiner Seite mit den groben Sachen fertig und es folgt nur noch der Feinschliff. Aber: Das System ist sowas von quälend langsam geworden und weiße Bildschirme, sowie Fehlermeldungen kommen so dermaßen oft, das es nicht mehr feierlich ist. Ich muß dazu sagen, das ich auch einen ganzen Brocken Module installiert habe. Das memory_limit hängt jetzt schon bei 128MB(alter VServer zum testen), aber trotzdem reicht es nicht und wenn man mal die Seitenaufrufe beschleunigt, dann bricht die Datenbank zusammen. Deswegen wollte ich euch fragen, ob man da noch etwas tunen kann, damit das System etwas weniger Resourcen frißt und schneller läuft. Boost habe ich schon installiert. Kann man vielleicht noch etwas mit der Datenbank, oder dem Server machen? Die Community wird zwar ihren eigenen Server bekommen, aber wenn da mal was los ist, dann geht das Teil ja auch schnell in die Knie bei dem Resourcenhunger...
Beste Grüsse
Tom
- Anmelden oder Registrieren um Kommentare zu schreiben
Was bedeutet "wenn man mal
am 22.12.2008 - 17:53 Uhr
Was bedeutet "wenn man mal die Seitenaufrufe beschleunigt"?
Was bedeutet "dann bricht die Datenbank zusammen"?
Performance ist eine messbare Größe. Zur Beurteilung sind Zahlen, Daten, Fakten nicht schlecht. Die beinhalten Messungen (unter Nenneung der Bedingungen), Konfigurationsparameter, etc.
Grundsätzlich kann man ad hoc und ohne ein Systemaudit nur Stichpunkte nennen:
- Monitoring fahren (z.B. mit Munin)
- Bottlenecks finden (Welcher Systemteil verursacht unter welchen Bedingungen einen Engpass?)
- nicht benötigte Module deaktivieren und entfernen
- öffentliche Download-Methode benutzen
- CSS zusammenpacken (kann Drupal teils automatisch, wenn die CSS Dateien clever genug angelegt wurden)
- JS Dateien zusammenfassen (kann D6 teils automatisch)
- CSS Sprites benutzen
- Webserver auf das Zugriffsmuster hin optimieren
- nicht benötigte Erweiterungen des Webservers deaktivieren
- PHP Opcode Cache (z.B. APC) verwenden und aufs Zugriffsverhalten optimieren
- statische Files über einen leichtgewichtigeren Webserver laufen lassen (nginx, lightppd, ...)
- Reverse Proxy vorschalten
- memcached einsetzen
- DB Server separieren
- RDBMS auf Zugriffsmuster der Anwendung und derer DB hin optimieren
- Teile des Dateisystems in eine Ramdisk schaufeln
- Server mit ausreichend Leistung einsetzen
- ...
Sinn, Unsinn und nötiges Ausmaß der diversen Maßnahmen kann man aber nur beurteilen, wenn man das Gesamtsystem auf Herz und Nieren prüfen kann.
Es bringt überhaupt nichts rein auf Verdacht irgendwas zu installieren, was vorgibt irgendwas zu beschleunigen. In der Softwareentwicklung lernt man, dass wenn 5% der Anwendung 95% der Laufzeit ausmachen, Optimierungen an den übrigen 95% des Codes auch keine Performancegewinne erzielen.
Suchmaschinenoptimierung (SEO) & Drupal
Erstmal ein richtig dickes
am 23.12.2008 - 04:31 Uhr
Erstmal ein richtig dickes Danke... :)
Das nenne ich mal eine Community mit kompetenten Leuten und sozialen Charackter. Drupal ist halt nicht nur vom System her das Beste was ich bis jetzt in Fingern hatte... ;)
Was bedeutet "wenn man mal die Seitenaufrufe beschleunigt"?
Das hatte schon gereicht, wenn 4 Leute den Server kurzzeitig mit Anfragen belasten und verschiedenes aufrufen. Habe jetzt erstmal ein par Module still gelegt und ein wenig Fehler gekillt. Sieht schon besser aus. Hier muss ich nochmal ein bischen tüfteln und das ganze anders lösen. Ich arbeite auch mit 2 verschiedenen Templates, das frisst auch noch ein wenig. Da muß ich mir noch eine bessere Lösung einfallen lassen. Die CSS Dateien habe ich zu einer zusammengefasst. Das passt soweit. Alle unwichtigen Erweiterungen des Servers habe ich gekillt(außer Plesk :)) Das Sitemap Modul hat auch noch rumgesponnen und bei fast jedem Klick versucht eine Sitemap aufzurufen. Das habe ich aber gelöst und funktioniert jetzt(hatte ich zwar deaktiviert, aber da kamen irgendwie immernoch Abfragen). Das Statistikmodul ist echt geil! Schade das ich mich erst jetzt so richtig mit Drupal befasse. Das ist ja wirklich alles vom FEINSTEN... :) So macht das Spass. CSS Sprites nutze ich. Das Template ist schon 1a aufgebaut. Logo, Layout, Buttons + Icons machen insgesammt etwa 30 kb. Gibt es ein Modul, wie man die js Dateien zu einer zusammenfasst?(Drupal5)
Was bedeutet "dann bricht die Datenbank zusammen"?
mysql_query(): Unable to save result set in /srv/www/vhosts/beispieldomain.com/httpdocs/includes/database.mysql.inc in Zeile 155
Got error 12 from storage engine query: SELECT data, created, headers, expire FROM cache WHERE cid = 'locale:de' in /srv/www/vhosts/beispieldomain.com/httpdocs/includes/database.mysql.inc in Zeile 174.
Nach ein Weilchen warten gings dann wieder. Sogar den FTP Zugang hat er mir verbaut und nicht mal Putty hat gegriffen. Der Server ist auch nicht gerade das gelbe vom Ei. Ist ein alter VServer von Strato. Da ist aber auch noch ein kleines Forum und 1 Blog drauf, welche ein bischen Traffic schieben(etwa 1000 unique). Ich denke mit dem neuen Server sollte es kein Problem sein. Mit 2GB Ram sollte das Teil eine Weile hinkommen.
Wie kann ich einen DB Server separieren? Das habe ich noch nie gemacht. Funktioniert das ordentlich?
Ich werde dann mal mit Munin ein par Tests starten und den Rest deiner Liste abarbeiten... Vorallem memcached hört sich sehr, sehr interessant an. Mal sehen wie schnell ich das Teil noch bekomme. Bis jetzt ist es noch nicht annähernd akzeptabel.
Beste Grüsse und vielen Dank
Tom
Wie gesagt, es bringt nichts
am 23.12.2008 - 11:40 Uhr
Wie gesagt, es bringt nichts blind draufloszuoptimieren.
Deine Datenbank bricht nicht direkt zusammen, ihr geht schlichtweg der Speicher aus. Offensichtlich ist dein System in Bezug auf RAM nicht worst-case optimiert.
DB Server separieren bedeutet schlichtweg ihn auf einem eigenen Server laufen zu lassen. Das macht natürlich vor allem dann Sinn, wenn man mit dem Hoster verhackstückeln kann, dass beide Server im Optimalfall z.B. über ein Cross-Connect Kabel auf ner eigenen Netzwerkkarte laufen, oder zumindest im selben Rack untergebracht und direkt über den Switch verbunden sind. In unterschiedlichen Rechenzentren / Subnetzen fressen die Latenzen die eingeplanten Performancezuwächse auf und bremsen womöglich gar.
Hintergrund ist, dass die verschiedenen Serverdienste ihre Maschinen auf verschiedene Arten belasten. Datenbankserver skalieren mit I/O Leistung (Speicherbandbreite, Diskperformance, ...), wogegen Webserver eher CPU-lastig sind. Trennt man die Systeme, kann man sie einzeln besser auf ihren Einsatz optimieren. Muss man aber erst, wenn sich Webserver und Datenbankserver ins Gehege kommen.
Memcache habe ich selber eine ganze Weile im Einsatz gehabt, bringt aber bei Ein-Server-Lösungen praktisch nichts. Drupal cacht von sich aus über die Datenbank und hält dort auch diverse Variablen fest. Die Anfragen auf die entsprechenden Tabellen laufen bei einer halbwegs ordentlich eingestellten MySQL DB über den Query Cache und verursachen praktisch kaum zusätzliche Last. Diejenigen Anbfragen, die komplexer sind, die dynamisch in Drupal generiert werden und nicht über den Cache von Drupal laufen, laufen beim Einsatz von Memcache auch nicht über den Memcache, erfahren also auch keine Beschleunigung. Dafür klaut Memcache aber RAM, den man womöglich andernorts besser einsetzen kann.
Memcache macht gerade in Zusammenhang mit einem separaten DB Server Sinn, weil man so Latenzen und Bandbreite bei der Kommunikation zum DB-Server einspart. Dann aber bitte möglichst separate Memcache-Server und am besten gleich mehrere davon...
Ich hab aktuell wegen eines kleinen Problems zwischen Drupals Caching und manchen Browsern, dem ich noch genauer nachstellen muss, eine Website mit siebenstelligen PIs im Monat ohne Caching laufen und die paar Hundert (und manchmal auch vierstelligen) SQL Abfragen die Sekunde zzgl. Webserver macht der Server problemlos mit.
Irgendwo habe ich auch noch nen Dual-Quadcore mit 8 GB RAM laufen, der sich ganz tierisch langweilt... Die meisten Projekte sind servertechnisch leider viel unspannender, als man meint ;)
Suchmaschinenoptimierung (SEO) & Drupal
Vielen, vielen Dank für
am 29.12.2008 - 19:53 Uhr
Vielen, vielen Dank für deine Hilfe. Soweit passt das jetzt alles und ich habe den Server so gut es geht eingestellt. Es bricht nichts mehr zusammen, vom Speed her geht jetzt schon eine Ecke mehr, aber der Server hat eindeutig zu wenig Ram für eine große Community und lahmt sehr oft(manchmal geht es ganz ordentlich, dann ist er wieder langsam. Kann leider nicht sehen, was sich da noch für Seiten auf dem Server tummeln).
Ich hab aktuell wegen eines kleinen Problems zwischen Drupals Caching und manchen Browsern, dem ich noch genauer nachstellen muss, eine Website mit siebenstelligen PIs im Monat ohne Caching laufen und die paar Hundert (und manchmal auch vierstelligen) SQL Abfragen die Sekunde zzgl. Webserver macht der Server problemlos mit.
das nenne ich mal krass... :)
Beste Grüsse und wünsche einen guten Rutsch euch allen
Tom
Ich denke so krass ist das
am 29.12.2008 - 19:59 Uhr
Ich denke so krass ist das gar nicht. Im MySQL Performance Blog las ich die Wochen noch was von einem relativ betagten Dual Core, den man eine fünfstellige Anzahl Abfragen hat beackern sehen. Ist natürlich immer die Frage der konkreten DB, der Abfragen und der Konfiguration.
Suchmaschinenoptimierung (SEO) & Drupal
Ich hätte das nicht für
am 30.12.2008 - 18:42 Uhr
Ich hätte das nicht für möglich gehalten. :)
Beste Grüsse