Wie kann ich mildern Verbindung Leck ausgelöst für den Anschluss com.mysql.jdbc.JDBC4Connection@11d08960,
Habe ich ein mqtt-client erste Anfrage das abonnieren von Themen,
und dann gebe ich es zu-threadpool fester Größe 50.
Im mit hikaricp 2.4.2 für DB-Pooling MySQL-Datenbank.
Ich bin jetzt mit 2.4.2 und das ist mein setup
HikariConfig config = new HikariConfig();
config.setDataSourceClassName(CLASS_FOR_NAME);
config.setJdbcUrl(HOST);
config.setUsername(USER);
config.setPassword(PASS);
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
config.setLeakDetectionThreshold(TimeUnit.SECONDS.toMillis(30));
config.setValidationTimeout(TimeUnit.MINUTES.toMillis(1));
config.setMaximumPoolSize(10);
config.setMinimumIdle(0);
config.setMaxLifetime(TimeUnit.MINUTES.toMillis(2)); //120 seconds
config.setIdleTimeout(TimeUnit.MINUTES.toMillis(1)); //minutes
config.setConnectionTimeout(TimeUnit.MINUTES.toMillis(5));
config.setConnectionTestQuery("/* ping */SELECT 1");
Hier ist der vollständige log-Meldung :
WARNLOG:
811439 [Hikari Haushälterin (pool HikariPool-0)] WARNEN
com.zaxxer.hikari.pool.ProxyLeakTask - Verbindung Lecksuche
ausgelöst für den Anschluss com.mysql.jdbc.JDBC4Connection@11d0896 stack
trace folgt java.lang.Ausnahme: Offensichtlicher Zusammenhang Leck entdeckt
bei com.hcpdatabase.DataSource.getConnection(DataSource.java:69)
bei com.Datenbank.AccessDatabase.create_alert(AccessDatabase.java:3849)
bei com.lauffaehig.StartTaskRunnable2.execute(StartTaskRunnable2.java:78)
Ist das normal ? muss ich fangen?
DataSource
Klasse, wissen Sie, wo das Leck erkannt wird.Schließen Sie Ihre
Connections
?ja, eigentlich manchmal gibt es einige burst-Transaktionen 30 Transaktionen in einer Sekunde, ich denke, das ist, warum es nicht thread-sicher(denke ich).
Ich habe immer mit try{}finally{// Verbindung schließen hier} die ganze Zeit.
Ich sagte nie etwas über thread-Sicherheit. Undichte Verbindung sind eine sehr einfache Sache, Sie heraus überprüfen einer Verbindung, aber niemals schließen (d.h. es wieder zurück an den pool). Wenn du mit try/finally (oder try-mit-Ressourcen) konsequent überall, es sollte keine undichten verbindungen.
InformationsquelleAutor david | 2015-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als ich überprüfte meine codes immer und immer wieder. Ich kam zu erkennen, dass ich bellen am falschen Baum, Scheint, wie hikari ist sehr zuverlässig, wenn es um die Verbindung undicht werden. Das problem ist, wenn amazon aws ec2-Instanz ist stehlen einige meiner cpu und ist sogar größer als das, was ich dachte. So nach und nach geht die cpu bis 99%, Anschluß-Leck erkannt wird, obwohl meine codes deutlich geschlossen, es in den finally-block. Also das problem liegt bei der Maschine.
Ich danke für alle, die teilgenommen haben, zu beantworten.
InformationsquelleAutor david
Spaziergang durch den code mit "stack trace" - und Sie würde dazu führen Sie zu un-geschlossene Verbindung oder die Verbindung, die länger dauert als die Schwelle.
config.setConnectionTestQuery("/* ping */ ");
dieserconfig.setConnectionTestQuery("/* ping */ SELECT 1");
und jetzt ich habe nicht gesehen, alle 100+ Sekunden schlafen verbindungen.test Abfrage unter 100+ Sekunden ! komisch. deine Frage schon hatte
config.setConnectionTestQuery("/* ping */ SELECT 1");
Aber, gute Sache ist die if-Abfrage beginnt mit/* ping */
(ist Kleinschreibung und vertrauliche Speicherplatz) ermöglicht Connector/J-Treiber zur Durchführung einfacher ping gegen den server statt der ausgeführten Anweisung.Nein was ich meine ist, dass 100+ Sekunden im Leerlauf/Schlaf-verbindungen ist tatsächlich undicht Verbindung, da ich bereits meine Verbindung zum sterben in weniger als 90 Sekunden.
wo stellen Sie in 90 Sekunden? es ist 120 ! aus der Frage:
config.setMaxLifetime(TimeUnit.MINUTES.toMillis(2)); // 120 seconds
config.setIdleTimeout(TimeUnit.MINUTES.toMillis(1)); // minutes
ist maxlife Zeit , wenn Ihr im Leerlauf nur eine minute. Ich weiß nicht, warum > 80 und weniger als 90, die ich hier beobachtetInformationsquelleAutor Nitin