Ein wenig Hintergrund über die Anwendung, die ich werde darüber reden in den nächsten paar Zeilen am:Oracle T4CPreparedStatement Speicherlecks?
XYZ ist ein Datenmaskierungswerkbank RCP Anwendung Eclipse: Sie es eine Quelle Tabellenspalte geben, und eine Zieltabelle Spalte, würde es eine Transformation (Verschlüsselung/Shuffling/etc) anwenden und die Zeilendaten von der Quellentabelle in die Zieltabelle kopieren. Wenn ich jetzt n Tabellen maskiere, werden n Threads von dieser App gestartet. Hier
ist die Frage:
I in eine Produktions Problem ausgeführt haben auf der ersten Rolle aus der oben genannten App. Leider habe ich keine Logs, um an die Wurzel zu gelangen. Ich habe jedoch versucht, diese App in Testregion zu betreiben und einen Stresstest durchzuführen.
Als ich .hprof-Dateien sammelte und sie durch einen Analysator (yourKit) lief, bemerkte ich, dass die Objekte von oracle.jdbc.driver.T4CPreparedStatement den Heap speicherten. Die Analyse sagt mir auch, dass eine meiner Klassen einen Verweis auf dieses vorbereitete Anweisungsobjekt enthält und dadurch n Threads n solche Objekte haben. T4CPreparedStatement schien Zeichenarrays zu haben: lastBoundChars und bindChars jeder Größe char [300000].
Also recherchierte ich ein bisschen (Google!), Erhielt ojdbc6.jar und versuchte, T4CPreparedStatement zu dekompilieren. Ich sehe, dass T4CPreparedStatement OraclePreparedStatement erweitert, die die Array-Größe von lastBoundChars und bindChars dynamisch verwaltet.
So sind meine Fragen hier:
- Haben Sie schon einmal in ein Problem laufen wie dieses?
- Kennen Sie die Bedeutung von lastBoundChars/bindChars?
- Ich bin neu zu Profiling, so dass Sie denke, ich mache es nicht richtig? (I lief auch die hprofs durch MAT - und das war die Haupt identifiziert Problem - so, ich glaube nicht wirklich ich falsch sein könnte?)
Ich habe etwas Ähnliches auf dem Netz gefunden hier : http://forums.oracle.com/forums/thread.jspa?messageID=2860681
Schätzen Sie Ihre Vorschläge/Ratschläge.
1. Ja. 2. Ja. 3. Nr. Auf der Oracle-Website gibt es ein Whitepaper, in dem die technischen Kompromisse in diesen Bereichen erläutert werden. http://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/memory%20management%20aug%202009.pdf –
Ich kam auch in das gleiche Problem. Hast du irgendwelche Lösungen? –