Können wir anzeigen von Objekten in der JVM-Speicher?
Bei der Arbeit haben wir festgestellt, dass auf einigen Instanzen (besonders die langsameren) wir haben ein anderes Verhalten, erworben am Neustart.
Wir denken, dass ein cache nicht korrekt initialisiert, oder vielleicht eine Parallelität problem...
Es ist trotzdem nicht reproductible in andere env als die Produktion.
Wir eigentlich nicht haben-Logger zu aktivieren... es ist eine alte Komponente...
Also ich würde gerne wissen, ob es tools gibt, die uns helfen können zu sehen, die verschiedenen objets vorhanden in den JVM-Speicher, um zu überprüfen, die den Inhalt des cache...
Danke!
Edit:
Ich nicht haben Zugang zu den Produktions-Servern direkt, unsere app-server weblogic 10, ich habe nicht einen Zeiger auf das Objekt, aber ich weiß, das cache-Objekt geben...
Edit2:
Unsere Server laufen auf jre 1.5, ist es möglich, jmap? Kann es nicht finden in einem jdk5 🙁
Auch der remote-debugging-könnte nett sein, aber wir können Sie nicht aus Gründen der Sicherheit...
Edit3:
Eigentlich jhat + VisualVM ist ok für mich, fand ich mein Objekt im dump, aber ich bin nicht in der Lage zu Lesen hashmap (Objekt mit über 60000 Elemente) richtig...
Gibt es ein tool zum Lesen einer concurrenthashmap in einer freundlichen Art und Weise? ich muss den Wert des Schlüssels (oder seine Existenz in der Karte) ohne browsing manuell die 60k records.
Eigentlich lese ich auf eclipse MAT forum, dass es auch nicht möglich mit ihm...
Edit4:
Nach einigen Erfahrungen, die ich wirklich gerne tools wie VisualVM. Auch verwendet, YourKit.
Es gibt einige nützliche Funktionen, wie OQL finden Sie den richtigen Instanzen, die Sie benötigen, zu betrachten,...
- Ich weiß nicht, einen Weg, um Zugriff auf das Objekt, ohne irgendeine Art von Zeiger/variable Referenz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist im Grunde erweitern auf das, was gesagt wird.
Ich habe großen Erfolg hatte, indem er unsere admins machen einen heapdump unserer Produktionsanlagen, obwohl mit dem VORBEHALT, dass der jeweilige server, auf den Sie Abladen wird nicht reagiert, bis der dump abgeschlossen ist. Dann immer, dass die Datei, und verwenden Sie die Eclipse-MAT-plugin, um es zu betrachten. Wenn Sie nicht wie Eclipse, Netbeans und der Ebene VisualVM-plugin kann verwendet werden als gut. Dies kann einige große Dateien, obwohl, müssen Sie möglicherweise führen Sie auf einem 64-bit-system.
Es ist ziemlich einfach zu laufen jmap-dump, eine ANZAHL von Objekt-Instanzen, aber ich weiß nicht, ob das ist, was Sie wirklich interessiert.
Können Sie auch verwenden, jmap zu tun, einen heap-dump der ganze Haufen, und mit diesem (und jhat), Sie können finden Sie unter Objekt-Beziehungen (D. H. welches Objekt Punkte, was), aber nicht notwendigerweise Objekt-INHALT.
Sicherlich die Daten in den heap-dump, es ist nicht "wegklicken" sichtbar.
Einige der professionellen profilern ich denke, lass Sie untersuchen die Objekte in einen heap dump.
Otherewise Sie wären besser dran, indem einige spezifische Instrumente, um die Anwendung zu bieten, die spezifischen Introspektion, die Sie suchen, ausgelöst durch benutzerdefinierten code, JMX, oder was auch immer.
Haben Sie Zugang zu einem Griff/Zeiger auf die Objekte? Wenn ja, können Sie fire it up im debug-Modus, und schauen Sie es in einem debugger wie Eclipse. Dies ermöglicht es Ihnen, Variablen inspizieren und dergleichen.
Alternativ könnten Sie auch schreiben, ein wenig-logger, der nachdenklich geht durch die Klasse und protokolliert, was Los ist. All dies setzt Voraus, Sie haben einen Ort, wo Sie beginnen können, um Schritt in den code, oder kann ein Verweis auf die zwischengespeicherten Werte.
edit: Wie ich bereits in meinem Kommentar, ich weiß nicht, einen Weg, um Zugriff auf ein Objekt, ohne irgendeine Art von Verweis oder link Verweise. Zum Beispiel ist das Objekt gekapselt in einem anderen Objekt? Wenn ja, können Sie etwas wie die folgende:
Können Sie auch etwas tun wie:
Beachten Sie, dass alle Reflexion Methoden, die exceptions werfen, müssen Sie Sie zu behandeln, als angemessen. Auch
setAccessible(true)
bedeutet, dass Sie Zugriff auf private Felder und Methoden des Objekts. Dies ist EXTREM GEFÄHRLICH - Nur verwenden, wenn Sie absolut müssen.