Page 1 of 1

Speicherauslastung in den Griff bekommen

Posted: 2005-07-06 16:49
by atmosfear
Hallo,

ich administriere einen 1und1 Rootserver mit 240MB Speicher und 768MB Swap.
Zur Zeit beträgt die Speicherauslastung jedoch rund 600MB:

Code: Select all

  4:35pm  up 217 days, 12:28,  1 user,  load average: 0.25, 0.08, 0.02
160 processes: 159 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  0.1% user,  0.1% system,  0.0% nice,  0.0% idle
Mem:   247500K av,  232952K used,   14548K free,       0K shrd,    5812K buff
Swap:  787176K av,  372176K used,  415000K free                   28404K cached
Dabei zeigt ein Prozesslisting neben 20 https noch 70 mysqld-max. Die restlichen rund 70 Prozesse splitten sich auf das Mail-System (Courier-IMAP, Amavisd-New + Clamav, Postfix) sowie Shell etc. auf.

Auf Grund des hohen Speicherbedarfs sind die Latenzzeiten bei Web-Anfragen inakzeptabel geworden.

Als Anwendungen laufen auf dem System einige Typo3-CMS sowie ein Webshop, ansonsten überwiegend statische Seiten. Dazu kommen ca. 100 Mailkonten, deren Inhalt im Minutentakt abgefragt wird.

Nun meine Frage, wie kann die die Speicherauslastung des Systems verringern und/oder die Latenzzeiten verbessern?

Zur Zeit ist PHP mit Persisent Connections On und ohne Verbindunsglimits konfiguriert. Welche Werte machen hier Sinn und wo kann ich sonst noch ansetzen um den Speicherbedarf zu verringern?

Ciao,
Felix

Re: Speicherauslastung in den Griff bekommen

Posted: 2005-07-06 17:09
by stefanpropehan
70 mysqld Prozesse sind schon arg viel!

Du solltest als erstes, die persistenten Verbindungen für PHP abschalten...

Danach schau mal in mysql nach den Einstellungen für "timeout" und "interactive-timeout"... die Werte bestimmen wann ein nicht genutzter mysqld Prozess wieder geschlossen wird....

Stefan

Re: Speicherauslastung in den Griff bekommen

Posted: 2005-07-06 17:28
by atmosfear
Danke für die Tips. Ich habe jetzt erstmal die persistent connections abgeschaltet, allerdings geht dadurch dann die Serverlast in die Höhe, weil natürlich mehr MySQL Verbindungen aufgebaut werden müssen, daher scheint es mir die beste Lösung zu sein, persistent conenction aktiviert zu lassen, dafür aber die anzahl der persistent connections zu begrenzen.

Die Frage ist jetzt nur, welche Anzahl an Persistent Connections macht sinn, gibt es eine Faust-Formel um diese zu berechnen?

Edit:
Ich habe nun erstmal in PHP die Persistent Connections aktiviert, diese jedoch auf 20 Verbindungen (frei nach der Devise eine pcon pro apache child), was schon zu einer merkbaren Verbesserung der Antwortzeiten geführt hat:

Code: Select all

  5:54pm  up 217 days, 13:47,  3 users,  load average: 0.24, 0.20, 0.17
137 processes: 136 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  1.5% user,  2.5% system,  0.0% nice, 95.8% idle
Mem:   247500K av,  241672K used,    5828K free,       0K shrd,    4784K buff
Swap:  787176K av,  163668K used,  623508K free                   22776K cached

Re: Speicherauslastung in den Griff bekommen

Posted: 2005-07-06 17:47
by Joe User

Re: Speicherauslastung in den Griff bekommen

Posted: 2005-07-06 20:39
by atmosfear
@Joe User: Die meisten MySQL-Einstellungen stimmen entweder überein oder sind sogar noch niedriger eingestellt, allerdings kann ich sie nicht 100% zuordnen, da ich noch MySQL 3.23 einsetze. Die Einstellungen für query cache habe ich momentan garnicht, da muss ich mal in ruhe auf der MySQL Seite suchen, was da die äquivalente für 3.23 sind.

Für erste habe ich neben den erwähnten Ã?nderungen:

Code: Select all

mysql.allow_persistent = On
mysql.max_persistent = 20
mysql.max_links = -1
Noch den Turck MMCache 2.4.6 installiert und diesen mit den defaults von der Webseite konfiguriert. Das ganze hat schonmal insgesamt einen deutlichen Leistungsschub gebracht.