Speicherauslastung in den Griff bekommen

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
atmosfear
Posts: 5
Joined: 2005-07-06 16:34

Speicherauslastung in den Griff bekommen

Post by atmosfear » 2005-07-06 16:49

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

stefanpropehan
Posts: 335
Joined: 2002-12-17 22:25
Location: Berlin

Re: Speicherauslastung in den Griff bekommen

Post by stefanpropehan » 2005-07-06 17:09

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

atmosfear
Posts: 5
Joined: 2005-07-06 16:34

Re: Speicherauslastung in den Griff bekommen

Post by atmosfear » 2005-07-06 17:28

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
Last edited by atmosfear on 2005-07-06 18:01, edited 1 time in total.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11583
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Speicherauslastung in den Griff bekommen

Post by Joe User » 2005-07-06 17:47

PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

atmosfear
Posts: 5
Joined: 2005-07-06 16:34

Re: Speicherauslastung in den Griff bekommen

Post by atmosfear » 2005-07-06 20:39

@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.