Ein wenig Hintergrundinformationen zur Anwendung, über die ich in den nächsten Zeilen sprechen werde:
XYZ ist eine Data-Masking-Arbeitsbank Eclipse RCP-Anwendung: Sie geben ihr eine Quelltabellenspalte und eine Zieltabellenspalte, sie wendet eine Transformation an (Verschlüsselung/Shuffling/usw.) und kopiert die Zeilendaten von der Quelltabelle in die Zieltabelle. Wenn ich jetzt n Tabellen gleichzeitig maskiere, startet diese App n Threads.
Hier ist das Problem:
Beim ersten Rollout der oben genannten App bin ich auf ein Produktionsproblem gestoßen. Leider habe ich keine Protokolle, um zur Ursache zu gelangen. Allerdings habe ich versucht, diese App in der Testumgebung zu starten und einen Stresstest durchzuführen.
Als ich .hprof-Dateien gesammelt und sie durch einen Analyzer (yourKit) laufen ließ, bemerkte ich, dass Objekte von oracle.jdbc.driver.T4CPreparedStatement Heap behalten haben. Die Analyse zeigt mir auch, dass eine meiner Klassen eine Referenz auf dieses Preparedstatement-Objekt hält und somit n Threads n solche Objekte haben. T4CPreparedStatement schien Zeichenarrays zu haben: lastBoundChars und bindChars jeweils der Größe char[300000].
Also habe ich ein wenig recherchiert (Google!), ojdbc6.jar erhalten und versucht, T4CPreparedStatement zu dekompilieren. Ich sehe, dass T4CPreparedStatement OraclePreparedStatement erweitert, das die Arraygröße von lastBoundChars und bindChars dynamisch verwaltet.
Also lauten meine Fragen hier:
- Bist du jemals auf ein Problem wie dieses gestoßen?
- Kennst du die Bedeutung von lastBoundChars / bindChars?
- Ich bin neu im Profiling, also denkst du, dass ich es falsch mache? (Ich habe die hprofs auch durch MAT laufen lassen - und dies war das Hauptproblem, das identifiziert wurde - also denke ich nicht wirklich, dass ich falsch liege?)
Ich habe etwas Ähnliches im Web gefunden hier: http://forums.oracle.com/forums/thread.jspa?messageID=2860681
Ich schätze Ihre Vorschläge / Ratschläge.
0 Stimmen
1. Ja. 2. Ja. 3. Nein. Es gibt ein Whitepaper auf der Oracle-Website, das die technischen Abwägungen bezüglich dieser Felder erklärt. oracle.com/technology/tech/java/sqlj_jdbc/pdf/…
0 Stimmen
Ich bin auch auf das gleiche Problem gestoßen. Hast du Lösungen dafür?