close Warning: Can't synchronize with repository "keplertools" (/srv/svn/keplertools does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 15 years ago

Closed 15 years ago

#388 closed Defekt (erledigt)

mysqld macht 100% CPU-Load

Reported by: Rüdiger Kupper Owned by: bau
Priority: bei Gelegenheit Milestone:
Component: Server: LML-Server (paedml) Severity: beeinträchtigt den Unterricht einiger Lehrer
Keywords: Cc:

Description (last modified by Rüdiger Kupper)

Gerade sehe ich, dass auf dem paedml ein mysqld wildgeworden ist. Ich werde den mal killen.
(Bitte im Auge behalten, ob das öfter passiert.)

Change History (19)

comment:1 by Rüdiger Kupper, 15 years ago

Description: modified (diff)

comment:2 by Rüdiger Kupper, 15 years ago

Hängt möglicherweise mit dem Timeout bei Trac zusammen (benutzt ja eine MySQL-Datenbank).
Unklar, was hier Ursache und was Wirkung ist.

comment:3 by Rüdiger Kupper, 15 years ago

Jedenfalls kann eine Änderung im Trac diesen Fehler hervorrufen: Der mysqld macht 100% CPU-Last und antwortet niemals auf die Anfrage. Daher bleibt auch der apache dort hängen.

Eine Idee, warum der mysqld das macht?

comment:4 by bau, 15 years ago

Hast du eine Ahnung, was das für eine Anfrage ist?
Eventuell ist einfach die MySQL-Version schlichtweg veraltet (-> Update auf paedml5)

comment:5 by Rüdiger Kupper, 15 years ago

Trac verwaltet seine kompletten Daten (Tickets, Wiki, Timeline, etc.) in einer Datenbank. Es kann verschiedene Datenbanktreiber verwenden; MySQL ist laut Trac-Manual erst spät hinzugekommen und kann möglicheweise Probleme machen.

Daher kann es gut sein, dass ein Update des MySQL-Servers was bringt. Wir sollten schaun, dass wir den Udate auf PaedML5 bald vollziehen. (Ich hab hier schon ein OpenML5 in der virtuellen Maschine laufen, natürlich frisch hochgezogen, das geht problemlos.)

Allerdings hat Trac mit MySQL bei uns anfangs sehr gut funktioniert, vielleicht hängt's mit der Menge der Daten zusammen. (Andererseits: Ein Datenbankserver sollte ja gerade nicht von der Größe der Datenbank abhängig sein.)

Anfragen, die das auslösen können, sind z.B.

  • Ändern einer Wiki-Seite (Schreibvorgang)
  • Abfrage der Tickets (Lesevorgang)

Mehr hab ich nicht herausgefunden. Irgendwo habe ich gelesen, dass MySQL einen "slow transaction guard" hat, den man einschalten kann und der Informationen über Anfragen ausgibt, die sehr lange dauern. Den muss ich vielleicht mal anschalten.

comment:6 by Rüdiger Kupper, 15 years ago

Severity: → normal

Interessanterweise sind bei mir in den letzten Tagen keine Hänger mehr aufgetreten, obwohl ich viel mit Trac arbeite. Das kann also nicht die Ursache sein. Was dann?

comment:7 by bau, 15 years ago

Im phpMyAdmin kann man die Processlist anzeigen lassen. Da gibt es dann jede Menge nicht mehr benötigter MySQL-Prozesse. Wenn man die beendet geht der MySQLD sofort auf 0% CPU - was macht der TRAC da falsch?

comment:8 by bau, 15 years ago

Ich habe grade dieses Ticket gesendet. Sofort hat der TRAC drei mysql-Prozesse aufgemacht, die nun alle seither schlafen. Bleibt da irgendwas persistent im Speicher???
Das sollte der TRAC aber nicht machen!

comment:9 by Rüdiger Kupper, 15 years ago

Ich hab immer nur nach laufenden Prozessen gesucht, und da ist es im Normalfall so, dass ein Prozess auftaucht, kurz arbeitet und dann wieder verschwindet. Wenn das Trac hängt sieht man das daran, dass dieser Prozess dauerhaft 100% CPU verbraucht und erst nach langer Zeit wieder verschwindet.

Ob mysql-Prozesse im Hintergrund schlafen, habe ich nie getestet. Ich wüsste auch nicht, ob das normal ist oder nicht. Das kann ja auch normales Verhalten des mysqld sein.

comment:10 by Rüdiger Kupper, 15 years ago

Als ich eben den Kommentar abgeschickt habe, ist ein mysql-Prozess erschienen und sofort wieder verschwunden, jetzt läuft *kein* Prozess mehr (auch nicht schlafend).

comment:11 by Rüdiger Kupper, 15 years ago

Hm, und was sagt mir das hier:

mysql> show processlist;
+-------+------+-----------+------+---------+------+-------+------------------+
| Id    | User | Host      | db   | Command | Time | State | Info             |
+-------+------+-----------+------+---------+------+-------+------------------+
| 60656 | kup  | localhost | trac | Sleep   |  335 |       | NULL             | 
| 60671 | kup  | localhost | trac | Query   |    0 | NULL  | show processlist | 
+-------+------+-----------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

comment:12 by Rüdiger Kupper, 15 years ago

Nach dem letzten Kommentar (kein Hänger) sieht die porcess list jetzt so aus:

mysql> show processlist;
+-------+------+-----------+------+---------+------+-------+------------------+
| Id    | User | Host      | db   | Command | Time | State | Info             |
+-------+------+-----------+------+---------+------+-------+------------------+
| 60671 | kup  | localhost | trac | Query   |    0 | NULL  | show processlist | 
| 60672 | kup  | localhost | trac | Sleep   |   30 |       | NULL             | 
| 60673 | kup  | localhost | trac | Sleep   |   29 |       | NULL             | 
| 60674 | kup  | localhost | trac | Sleep   |   17 |       | NULL             | 
+-------+------+-----------+------+---------+------+-------+------------------+
4 rows in set (0.00 sec)

comment:13 by Rüdiger Kupper, 15 years ago

Und jetzt so:

mysql> show processlist;
+-------+------+-----------+------+---------+------+-------+------------------+
| Id    | User | Host      | db   | Command | Time | State | Info             |
+-------+------+-----------+------+---------+------+-------+------------------+
| 60671 | kup  | localhost | trac | Query   |    0 | NULL  | show processlist | 
| 60672 | kup  | localhost | trac | Sleep   |   76 |       | NULL             | 
| 60673 | kup  | localhost | trac | Sleep   |   11 |       | NULL             | 
| 60674 | kup  | localhost | trac | Sleep   |   11 |       | NULL             | 
| 60675 | kup  | localhost | trac | Sleep   |   43 |       | NULL             | 
| 60676 | kup  | localhost | trac | Sleep   |   19 |       | NULL             | 
+-------+------+-----------+------+---------+------+-------+------------------+
6 rows in set (0.00 sec)

Es kommen jedesmal schlafende Prozesse dazu, aber es hängt nirgends. -- ?

comment:14 by bau, 15 years ago

Ich vermute mal, dass es irgendwann einmal zu viele schlafende Hunde sind, und dann stockt das Ganze. Ich habe grade mal den Kepler-Login aufgerufen, der greift auch auf den mysql zu - man sieht noch nicht mal den Prozess, dann ist er schon wieder weg und schläft auch anschließend nicht. Also ein komisches Verhalten des TRAC. Kann man da in den Treibereinstellungen irgendwas bezüglich persistent o.Ä. einstellen?

comment:15 by Rüdiger Kupper, 15 years ago

Da schläft aber auch manchmal noch was anderes, z.B. ein Infosys-Prozess:

mysql> show processlist;
+-------+---------+--------------------+--------+---------+------+-------+------------------+
| Id    | User    | Host               | db     | Command | Time | State | Info             |
+-------+---------+--------------------+--------+---------+------+-------+------------------+
| 60680 | kup     | localhost          | trac   | Sleep   |  623 |       | NULL             | 
| 60701 | kup     | localhost          | trac   | Sleep   |  328 |       | NULL             | 
| 60702 | kup     | localhost          | trac   | Sleep   |  327 |       | NULL             | 
| 60704 | infosys | 10.16.209.88:38344 | Schule | Sleep   |   16 |       | NULL             | 
| 60718 | kup     | localhost          | trac   | Sleep   |   66 |       | NULL             | 
| 60719 | kup     | localhost          | trac   | Sleep   |   65 |       | NULL             | 
| 60720 | kup     | localhost          | trac   | Query   |    0 | NULL  | show processlist | 
+-------+---------+--------------------+--------+---------+------+-------+------------------+
7 rows in set (0.00 sec)

Und der verschwindet ebenfalls nicht mehr.

comment:16 by Rüdiger Kupper, 15 years ago

Hm. Jetzt ist einer der Trac-Prozesse verschwunden.
Außerdem sehe ich jede Menge apache2-Prozesse laufen, ist das normal?

08:35/0 paedml ~ # ps -ef|grep apache
root     17312     1  0 Dec18 ?        00:00:04 /usr/sbin/apache2 -k start
tomcat55 20367     1  0 Nov12 ?        01:14:46 /usr/local/java/current/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/var/lib/tomcat5.5/conf/logging.properties -Djava.awt.headless=true -Xmx512M -XX:MaxPermSize=256M -Djava.endorsed.dirs=/usr/share/tomcat5.5/common/endorsed -classpath :/usr/share/tomcat5.5/bin/bootstrap.jar:/usr/share/tomcat5.5/bin/commons-logging-api.jar -Dcatalina.base=/var/lib/tomcat5.5 -Dcatalina.home=/usr/share/tomcat5.5 -Djava.io.tmpdir=/var/lib/tomcat5.5/temp org.apache.catalina.startup.Bootstrap start
www-data 30887 17312  0 08:18 ?        00:00:01 /usr/sbin/apache2 -k start
www-data 30937 17312  0 08:20 ?        00:00:02 /usr/sbin/apache2 -k start
www-data 30987 17312  0 08:21 ?        00:00:01 /usr/sbin/apache2 -k start
www-data 31285 17312  0 08:24 ?        00:00:03 /usr/sbin/apache2 -k start
www-data 31438 17312  0 08:25 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 31840 17312  1 08:29 ?        00:00:03 /usr/sbin/apache2 -k start
www-data 31890 17312  0 08:30 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 31891 17312  0 08:30 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 31892 17312  0 08:30 ?        00:00:00 /usr/sbin/apache2 -k start
www-data 31901 17312  0 08:31 ?        00:00:01 /usr/sbin/apache2 -k start
root     32135 31849  0 08:35 pts/2    00:00:00 grep apache

comment:17 by Rüdiger Kupper, 15 years ago

Da auch immer wieder mal Infosys-Prozesse lange schlafen, bin ich nicht überzeugt, dass das Problem wirklich bei Trac liegt, aber keine Ahnung.

Vorschlag: Wir updaten den paedml und schauen, ob es mit einer aktuelle mysql-Version noch das gleiche ist. Wenn ja: Trac unterstützt als Backend auch postresql, und da läuft ja auch ein Serve auf dem paedml, oder? Die Datenbank zu portieren ist aber etwas, was ich nciht unbedingt alle Tage tun will ;-).

comment:18 by bau, 15 years ago

Der InfoSys-Prozess ist normal, denn InfoSys greift per ODBC auf mysql zu, da bleibt der Prozess offen, bis man InfoSys schließt. Die apache-Prozesse sind wahrscheinlich auch normal, der macht halt für die Zugriffe mehrere Prozesse auf.

OK: Umstieg auf paedml5 abwarten und eventuell auf postgres umsteigen. Portierung wäre z.B. über ODBC aus ACCESS heraus möglich.

comment:19 by Rüdiger Kupper, 15 years ago

Resolution: → erledigt
Status: new → closed

Das Problem scheint nach unserem Update auf PädML5 verschwunden zu sein (toi, toi, toi).

Note: See TracTickets for help on using tickets.