phpbar.de logo

Mailinglisten-Archive

mySQL verbraucht zu viel CPU / sleep-Prozesse beenden nicht

mySQL verbraucht zu viel CPU / sleep-Prozesse beenden nicht

universe mysql-de_(at)_lists.bttr.org
Fri, 25 Oct 2002 12:04:50 +0200


Hi,

mySQL 3.23.49 auf Debian GNU/Linux 3.0 mit Kernel 2.4.19 auf einem Xeon
2 Ghz (Single) CPU mit 2 GB DDR-RAM. Folgendes Problem stellt sich:

Die mySQL-Prozesse beanspruchen immer zwischen 100%-200% CPU,
dementsprechend langsam wird das System und manche PHP-websites werden
erst nach 5-30 Sekunden ausgeliefert.

Ich habe versucht mich an die Ursache heranzutasten:

- "mysqladmin processlist" lieferte immer "Too many connections." Also
habe ich die max_connections testweise mal auf 500 gesetzt. Dann konnte
man beobachten, dass mehr und mehr Prozesse aufgebaut werden, sich aber
nicht wieder abbauen. Es handelte sich dabei immer um "Sleep"-Prozesse,
die praktisch ewig aufgebaut blieben. Nach ein paar Minuten waren die
500 connections fast vollstaendig aufgebraucht. Die load average des
Systems lag dabei jenseits von 20 und die websites konnten demnach nicht
mehr abgerufen werden.

- Testweise "wait_timeout" und "interactive_timeout" auf 60 Sekunden
gesetzt (default ist 8 Stunden). Das hat Abhilfe geschafft - die
"Sleep"-Prozesse wurden nach 60 Sekunden beendet und die max. Anzahl
aller mySQL-Prozesse lagen bei ca. 50 (gleichzeitig, inkl. Sleep).

- Momentan stehen die o.g. timeouts bei nur 10 Sekunden. So konnte man
die load noch etwas senken. Momentan bewegt sich die load average
zwischen 3 und 6, manchmal auch mehr. "top" sagt mir, dass es immer
zwischen 2-10 mysqld-Prozesse (UNIX) gibt die jeweils irgendwas von 20%
und 99.9% von der CPU abhaben wollen. In diesem Zusammenhang gibt es
dann auch Apache-Prozesse die sich mit weniger (10%-30%) CPU zufrieden
geben. 

mySQL wird durch PHP 4.1.2 (Apache 1.3.26) angesteuert. Ich habe
"mysql.allow_persistent = Off" in der php.ini eingestellt, in der
Hoffnung damit die Sleep-Prozesse gaenzlich loszuwerden bzw. die load zu
senken.

So wirklich weiss ich nach wie vor nicht wo das Problem ist. Der
PHP-Code ist mit zend encoded, man kann also schlecht sehen was die
PHP-scripts tatsaechlich machen. 

"mysqladmin status" liefert: Uptime: 848  Threads: 14  Questions: 9799 
Slow queries: 25  Opens: 71  Flush tables: 1  Open tables: 64  Queries
per second avg: 11.555

Die website ist schon relativ stark besucht - aber ich bin trotzdem der
Meinung dass diese Hardware damit locker auskommen muesste.

Beispiel: die load is jetzt gerade bei 3. "mysqladmin processlist" zeigt
nur 6-12 Prozesse - 50% davon sind "Sleep".

Hoert sich das ganze fuer euch eher nach einem Fehler in der
Programmierung an oder nach einer Fehlkonfiguration in mySQL (vielleicht
auch PHP?)? Wo kann ich mit der Suche nach dem Fehler weitermachen? 

Vielen Dank!

Gruss,
Markus




-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive