PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kniffelig: mysql frisst Speicher wie blöd



SeeksTheMoon
16.03.06, 22:26
Seit Jahren haben wir hier mehrere mysql-Datenbanken unter Debian stable laufen und plötzlich kann man sich mit dem mysql-Client nicht mehr am Server anmelden, denn der Client schluckt nach dem Start über 400 MB Speicher und zwingt das ganze System in die Knie.
Irgendwann kommt eine Meldung, dass fork keinen Speicher mehr hat.
Das kann man schön auf einer anderen Konsole mit "watch free -m" beobachten:
512 MB sind in dem Rechner, 111 werden genutzt, der Rest ist frei.
Dann startet man den mysql-Client und dann beginnt die 2-sekündige Talfahrt des freien Speichers auf der anderen Konsole, bis alles weg ist.

Der Server läuft tadellos; auch CGIs und Konsolenscripte funktionieren wie immer.
Das Dateisystem ist nicht beschädigt, der Speicher ist auch in Ordnung, die Festplatte ist ebenfalls ok.
Die md5 der Binary stimmt mit der auf einem anderen System überein (dort klappts problemlos) und ich habe den client und die lib schon neu installiert.
Momentan läuft Version 4.0.xx

Wer weiß noch was?

Tomek
16.03.06, 22:34
Wie sieht die MySQL-Prozessliste aus und mit welchen Einstellungen läuft der MySQL-Server? Und wie groß sind die Datenbanken?

SeeksTheMoon
17.03.06, 07:17
die Datenbanken auf diesem Server sind lächerlich klein:
mehrere sind < 200kb (alte Datenbankformate), eine ist 27MB (ibdata1 + 2*5MB logfile) (InnoDB)

Prozessliste:
(pstree)


├─mysqld_safe───mysqld_safe─┬─logger
│ └─mysqld


(ps aux)


USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1625 0.0 0.0 2576 168 ? S Mar15 0:00 /bin/sh /usr/bin/mysqld_safe
root 1655 0.0 0.0 2576 56 ? S Mar15 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 1656 0.0 0.3 115172 1800 ? S Mar15 0:07 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root 1657 0.0 0.0 1572 180 ? S Mar15 0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld


Die config ist hier, damit lief das schon immer:


[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock


[safe_mysqld]
err-log = /var/log/mysql/mysql.err

[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
bind-address = unsere_IP
log = /var/log/mysql.log
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-locking
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = thread_stack=128K

[mysqldump]
quick
set-variable = max_allowed_packet=1M

[mysql]

[isamchk]
set-variable = key_buffer=16M


btw: den Errorlogs kann man nichts entnehmen, die sind binary :mad:
Die normalen logs zeigen nichts schlimmes an.

SeeksTheMoon
28.03.06, 10:18
ich habe jetzt auf mysql 4.1.11 geupdated und debians neue configdatei genommen. Auch jetzt spinnt der client noch.
Man kann den nichtmal mit --version als Parameter aufrufen, also ohne überhaupt einen Datenbank-Connect herzustellen...