Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speicherleck in JDBC4Connection

Duffymo hat mit ziemlicher Sicherheit recht. Wenn wir in der Vergangenheit Speicherlecks hatten, war es praktisch IMMER der MySQL JDBC-Treiber. Ich vergesse nur, irgendwo ein kleines ResultSet oder Connection oder Statement zu schließen. Am Ende überprüfte ich die gesamte Codebasis jedes Mal, wenn wir diese verwendeten, um das Problem zu finden und sicherzustellen, dass sie geschlossen wurden.

Was die HashMap betrifft, habe ich das auch gesehen. Ich habe mir die Quelle nicht angesehen, aber mein Eindruck war, dass der MySQL-Treiber die Zeilen (zumindest die Zeilenwerte) intern in HashMaps gespeichert hat.

Das Durchsickern von ResultSets ist leider einfach. Die Idee, dass diese schließbaren Ressourcen, die sich selbst darum kümmern, in JDK 7 oder 8 kommen, spricht mich aus diesem Grund wirklich an.

Sie könnten irgendwo eine Shim-Klasse einfügen (z. B. für Connection), um jede geöffnete/geschlossene Ressource zu protokollieren, um zu sehen, ob Sie erkennen können, wo das Leck ist, ohne direkt alle Ihre Quellen zu lesen.