Grails / Hibernate Datenbank Abstürze unter Last: Es konnte keine Verbindung (auch wenn Pooling)
-
05-09-2019 - |
Frage
Ich habe eine Anwendung in Grails. Ich benutze Hibernate auf die Datenbank zuzugreifen (pro Standard grails Regeln) Ich verwende MySql und die Website funktioniert und stabil ist (für 6 Monate).
Ich tue Belastungstests, und vor kurzem entdeckt, dass die Datenbank weist Verbindungen unter Last.
Mit MySQL Server 5, kann ich sehen, Fäden angeschlossen schweben rund 20 Dachte, ich springt zwischen 11 - 30
mysql> show status like '%con%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| Aborted_connects | 72 |
| Connections | 65539 |
| Max_used_connections | 101 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 1 |
+--------------------------+-------+
7 rows in set (0.00 sec)
Meine Datenbank-Konfiguration ist Standard. (Der MySQL-Server lokal installiert ist, nicht gezeigt)
dataSource {
pooled = false
driverClassName = "com.mysql.jdbc.Driver"
username = "username"
password = "secret"
maxIdle = 15
maxActive = 100
}
Soll ich C3P0 untersuchen? Oder sollte ich meine maxActive bis 1000 und das Beste hoffen Ratschen up?
Lösung
Welche Fehler ist Grails Berichterstattung, wenn es nicht eine Datenbankverbindung bekommen? Auszeit? Refused?
Wenn Sie Ihren Test ausführen, wie geladen ist die Box? Prozent CPU, Speichernutzung, etc.
Es ist möglich, wird die Datenbank nur so überlastet, dass Grails wird immer Verbindungen Timeout. Wenn Sie Last bewältigen wollen, werden Sie wollen gepoolt DB-Verbindungen gehen. Ohne Pooling, Grails eine DB-Verbindung mit jeder Anforderung öffnen und schließen.
Andere Tipps
Überprüfen Sie Ihre MySQL-Konfiguration (/etc/mysql.conf oder es ist lokale Äquivalent), insbesondere die max Verbindungen und max conn pro Benutzereinstellungen; Das klingt, als ob es von mysql und nicht grails kommen werden.