Unser Server lagged – Zeit für Optimierungen

Ubuntu, Plesk, Apache, PHP, MySQL. Viel mehr läuft auf unserem Server eigentlich nicht. Deutlich potenter als der Vorgänger ist er auch. Warum zum Geier benötigen dann die Webseiten mit einem Mal Sekunden bevor sie angezeigt werden? Zeit wiedermal zu optimieren. Aber wie waren noch gleich die Settings, die ich vor zwei Jahren bei unserem letzten Server verwendet habe? Pff, das passiert mir nicht nochmal, diesmal schreibe ich sie auf!

Apache Optimierung

Beginnen wir beim Apache. Als erstes soll das Apache MPM Modul optimiert werden. Aber welches? Prefork, Worker oder Event?

/usr/sbin/apache2 -l

sagt mir mit welchen Modulen Apache kompiliert wurde. In meinem Fall war es prefork.c, also das Prefork Modul, dass ich nun in der

/etc/apache2/apache2.conf

etwas anpassen kann.

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers      5   #was 1
MinSpareServers   5   #was 1
MaxSpareServers   10  #was 5
MaxClients        150 #was 100
MaxRequestsPerChild   0
</IfModule>

Außerdem sollten alle nicht benötigten Module abgeschaltet werden, die man in

/etc/apache2/mods-enabled

findet. Am besten nutzt man

a2enmod <modulname>

um Module anzuschalten, bzw.

a2dismod <modulname>

um diese abzuschalten. Ich habe z.B. mod_include deaktiviert, da wir keine server Side Includes verwenden.

MySQL

Um überhaupt erstmal einen Zugriff auf die wichtigen MySQL Variablen zu erhalten, musste ich mich als „root“ Nutzer anmelden. Unter Plesk-basierten Systemen gibt es jedoch keinen „root“ Nutzer, sondern nur einen „admin“, der sich ausschließlich von localhost aus anmelden darf. Also rasch lokal mittels

mysql -uadmin -pcat /etc/psa/.psa.shadow

eingelogged und einen neuen User angelegt, mit dem ich dann auch die nötigen Rechte habe, ohne gleich die ganze Zeit als root (bzw. admin) agieren zu müssen:

GRANT ALL PRIVILEGES ON '%'.* to '<username>'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
CREATE USER '<username>'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Jetzt kann es aber endlich ans tunen gehen- Haaaaalt das klingt ja so als ob es einfach wäre. MySQL Tuning ist schwieriges Feld und hängt von vielen Faktoren ab, zu denen nicht nur die Serverhardware gehört, sondern auch die Applikationen die darauf laufen, die Tabellenformate (z.B. MyISAM oder innoDB) und folglich auch die Anfragetypen. Man kann also keine „Killer“-Konfiguration posten, die immer optimal läuft. Aber man kann sich mit der Zeit langsam annähern. Beginnen wir mit folgenden Werten in der

/etc/mysqld/my.cnf

im Bereich

[mysqld]

und sehen mal, wie sich die Werte auswirken.

table_open_cache        = 256 #was 64
key_buffer              = 64M #was 16M
read_buffer_size        = 1M  #was 128k
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
query_cache_limit       = 4M
query_cache_size        = 64M

Am besten man liest zu diesem Thema erstmal das High Performance MySQL Buch, treibt sich ein paar Wochen im MySQLPerformance-Blog rum oder liest was ich im Laufe der Monate für semiprofessionelle Ergüsse zu diesem Thema produziere 🙂

To be continued, äh optimized 😉

Kolja Engelmann

Technikfan, Freizeitprogrammierer, selbsternannter Toolking und vermutlich größter Drachenfan Deutschlands blogged hier die Lösungen zu IT-Problemen die ihm über den Weg laufen, kleine Softwaretools, nostalgische Anfälle und missbraucht das Ganze gern auch mal als privates Tagebuch und Fotoalbum.

Das könnte dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert