Προγραμματισμός

Heap Dump και Ανάλυση με VisualVM

Σε προηγούμενες αναρτήσεις ιστολογίου, έχω καλύψει τη χρήση του VisualVM για την απόκτηση πληροφοριών χρόνου εκτέλεσης HotSpot JVM με τρόπο παρόμοιο με το jinfo και τον τρόπο χρήσης του VisualVM σε συνδυασμό με τα JMX και MBeans με τρόπο παρόμοιο με το JConsole. Αυτή η δημοσίευση ιστολογίου εξετάζει πώς μπορεί να χρησιμοποιηθεί το VisualVM για τη δημιουργία και την ανάλυση ενός σωρού απόρριψης με τρόπο παρόμοιο με αυτόν που γίνεται με τα εργαλεία γραμμής εντολών jmap και jhat.

Το εργαλείο jmap (Java Memory Map) είναι ένας από τους διάφορους τρόπους με τους οποίους μπορεί να δημιουργηθεί ένα Java heap dump. Το Java Tech Heotes Tool (jhat) TechNotes / man page παραθέτει τέσσερις μεθόδους για τη δημιουργία ενός σωρού απόρριψης που μπορεί να αναλυθεί από το jhat. Οι τέσσερις αναφερόμενες μέθοδοι για τη δημιουργία χωματερών είναι η χρήση του jmap, JConsole (Java Monitor and Management Console), HPROF και όταν εμφανίζεται ένα OutOfMemoryError όταν -XX: + HeapDumpOnOutOfMemoryError Η επιλογή VM έχει καθοριστεί. Μια πέμπτη προσέγγιση που δεν αναφέρεται, αλλά είναι εύχρηστη, είναι το Java VisualVM. (Παρεμπιπτόντως, μια άλλη μέθοδος είναι η χρήση του MXBean που ονομάζεται HotSpotDiagnosticMXBean και της μεθόδου dumpHeap (String, Boolean).)

ο jmap Το εργαλείο είναι απλό στη χρήση από τη γραμμή εντολών για την παραγωγή ενός σωρού απόρριψης. Μπορεί να χρησιμοποιηθεί σε μια τρέχουσα διαδικασία Java, της οποίας το piocess ID (pid) είναι γνωστό (διαθέσιμο μέσω jps) ή σε ένα βασικό αρχείο. Σε αυτήν την ανάρτηση, θα επικεντρωθώ στη χρήση jmap με το αναγνωριστικό μιας τρέχουσας διαδικασίας.

Η σελίδα jmap δηλώνει ότι jmap είναι ένα πειραματικό εργαλείο με σχετικά περιορισμένες δυνατότητες στα Windows που ενδέχεται να μην είναι διαθέσιμα σε μελλοντικές εκδόσεις του JDK. Σε αυτήν τη σελίδα παρατίθενται επίσης διαθέσιμες επιλογές για να καθορίσετε τον τρόπο jmap θα πρέπει να δημιουργήσει ένα σωρό απόρριψη.

Το παρακάτω στιγμιότυπο οθόνης δείχνει πώς jmap μπορεί να χρησιμοποιηθεί για την απόρριψη ενός σωρού.

Το αρχείο απόρριψης που δημιουργήθηκε, dustin.bin σε αυτήν την περίπτωση, είναι δυαδικό όπως φαίνεται στο επόμενο στιγμιότυπο οθόνης.

Η δυαδική απόρριψη σωρού μπορεί να διαβαστεί με το τσατ εργαλείο. Το Sun's Java SE 6 περιελάμβανε την εφαρμογή του τσατ αντικαθιστά το HAT, το οποίο ήταν προηγουμένως διαθέσιμο ως ξεχωριστή λήψη. Είναι σχεδόν ασήμαντο να τρέχεις τσατ. Κάποιος πρέπει να επικαλεστεί μόνο τσατ στο αρχείο απόρριψης σωρού που δημιουργήθηκε με jmap (ή εναλλακτική τεχνική δημιουργίας απορρίψεων) όπως φαίνεται στο επόμενο στιγμιότυπο οθόνης.

Με τη δημιουργία χωματερών (jmap) και το τσατ χρησιμοποιήθηκε το εργαλείο, η απόρριψη μπορεί να αναλυθεί με ένα πρόγραμμα περιήγησης ιστού. Η έξοδος στην κονσόλα μας λέει ότι η χωματερή είναι διαθέσιμη στη θύρα 7000 (αυτή η προεπιλεγμένη θύρα μπορεί να παρακαμφθεί με το -Λιμάνι επιλογή). Όταν εκτελούσα το πρόγραμμα περιήγησης στον ίδιο υπολογιστή στον οποίο έτρεξα τσατ, Μπορώ να χρησιμοποιήσω localhost για το κεντρικό τμήμα του URL. Η αρχική σελίδα που χρησιμοποιεί το localhost και τη θύρα 7000 εμφανίζεται στο επόμενο στιγμιότυπο οθόνης.

Οι δηλώσεις γλώσσας ερωτήματος αυθαίρετου αντικειμένου (OQL) μπορούν να γραφτούν για να βρείτε τις απαραίτητες λεπτομέρειες στο heap dump. ο τσατ- ο διακομιστής ιστού που ξεκίνησε περιλαμβάνει βοήθεια OQL στη διεύθυνση URL // localhost: 7000 / oqlhelp /. Δείτε επίσης το Querying Java Heap with OQL για περισσότερες λεπτομέρειες σχετικά με τον τρόπο χρήσης του OQL. Ωστόσο, μπορεί κανείς να βρει συχνά αυτό που χρειάζεται κάποιος απλά χρησιμοποιώντας τις ήδη παρεχόμενες πληροφορίες και μετακινώντας μεταξύ τεμαχίων πληροφοριών χρησιμοποιώντας τους παρεχόμενους υπερσυνδέσμους.

Το παρακάτω στιγμιότυπο οθόνης δείχνει μία από τις πιο χρήσιμες σελίδες που είναι διαθέσιμες χάρη τσατΈξοδος από το διακομιστή ιστού της απόρριψης σωρού. Αυτή η σελίδα εμφανίζει τον αριθμό εμφανίσεων διαφόρων αντικειμένων Java, συμπεριλαμβανομένων αντικειμένων πλατφόρμας.

Ένα σημαντικό βοήθημα για την κατανόηση από τι δημιουργούνται αυτές οι ιστοσελίδες τσατ Το μέσο είναι η προδιαγραφή VM στη μορφή αρχείου κλάσης. Στην Ενότητα 4.3.2 ("Περιγραφείς πεδίου") αυτού του εγγράφου, υπάρχει ένας πίνακας που δείχνει τη χαρτογράφηση χαρακτήρων περιγραφικού πεδίου στον τύπο δεδομένων που χρησιμοποιούμε. Σύμφωνα με αυτόν τον πίνακα, το "B" δείχνει a ψηφιόλεξη, "C" υποδηλώνει a απανθρακώνω, "D" υποδηλώνει a διπλό, "F" υποδηλώνει a φλοτέρ, "I" δηλώνει ένα ακέραιος αριθμός, "J" δηλώνει a μακρύς, "L" δηλώνει μια αναφορά (παρουσία μιας κλάσης), το "Z" υποδεικνύει ένα boolean, και [ δείχνει έναν πίνακα.

Μέχρι στιγμής, έχω εξετάσει τη χρήση jmap και τσατ από τη γραμμή εντολών για να δημιουργήσετε ένα σωρό απόρριψη και να παράσχετε μια μέθοδο βασισμένη σε πρόγραμμα περιήγησης ιστού για την ανάλυση του δημιουργούμενου σωρού απόρριψης Αν και αυτά τα εργαλεία είναι σχετικά εύκολο στη χρήση, το VisualVM παρέχει παρόμοια λειτουργικότητα σε μια ακόμη ευκολότερη προσέγγιση.

Μία μέθοδος για τη δημιουργία ενός σωρού απόρριψης στο Visual VM είναι απλά να κάνετε δεξί κλικ στην επιθυμητή διαδικασία και να επιλέξετε "Heap Dump". Αυτή η μέθοδος εμφανίζεται στο επόμενο στιγμιότυπο οθόνης.

Αυτό δημιουργεί την απόρριψη σωρού όπως υποδεικνύεται από το όνομά της κάτω από τη διαδικασία Java.

Μια δεύτερη προσέγγιση για τη δημιουργία ενός σωρού απόρριψης με VisualVM είναι να κάνετε κλικ στη διαδικασία Java που σας ενδιαφέρει, ώστε να εμφανίζονται σχετικές καρτέλες ("Επισκόπηση", "Monitor", "Threads" και "Profiler") στο VisualVM Η επιλογή της καρτέλας "Monitor" παρέχει το κουμπί "Heap Dump" όπως φαίνεται στο επόμενο στιγμιότυπο οθόνης.

Κάνοντας κλικ στο κουμπί "Heap Dump" οδηγεί στο να δημιουργηθεί μια χωματερή σωρού όπως ακριβώς με την επιλογή δεξιού κλικ που περιγράφεται παραπάνω. Αυτό φαίνεται στο επόμενο στιγμιότυπο οθόνης, το οποίο συμβαίνει σε αυτήν την περίπτωση για να εμφανιστεί η καρτέλα "Σύνοψη" του αναλυθέντος σωρού.

Εκτός από την καρτέλα "Σύνοψη" της ανάλυσης χωματερών, άλλες ενδιαφέρουσες λεπτομέρειες από την χωματερή παρουσιάζονται στην καρτέλα "Κατηγορία". Αυτή η καρτέλα περιλαμβάνει οριζόντια γραφήματα που δείχνουν γραφικά το ποσοστό των συνολικών παρουσιών που σχετίζονται με κάθε τάξη. Ένα παράδειγμα εμφανίζεται στο επόμενο στιγμιότυπο οθόνης.

Οι εμφανιζόμενες τάξεις είναι γραμμένες αντί να χρησιμοποιούν σύμβολα όπως αυτά που περιγράφονται παραπάνω για τσατ- ανάλυση με βάση την απόρριψη σωρών. Κάποιος μπορεί να κάνει δεξί κλικ σε οποιαδήποτε τάξη στην καρτέλα "Μαθήματα" και να επιλέξει "Εμφάνιση σε προβολή παρουσιών" για να δείτε λεπτομέρειες για κάθε μεμονωμένη παρουσία της επιλεγμένης τάξης. Αυτό εμφανίζεται στο επόμενο στιγμιότυπο οθόνης.

συμπέρασμα

Το VisualVM παρέχει πολλά πλεονεκτήματα κατά τη δημιουργία και την ανάλυση των σωρών. Πρώτον, τα πάντα, από τη δημιουργία έως την ανάλυση είναι σε ένα μέρος. Δεύτερον, τα δεδομένα παρέχονται σε μια μορφή που μπορεί να θεωρηθεί πιο ευπαθή με γραφική υποστήριξη. Τέλος, άλλα εργαλεία μπορούν επίσης να χρησιμοποιηθούν στο VisualVM σε συνδυασμό με την ανάλυση heap dump. Το VisualVM παρέχει μονοαπευθυντικές αγορές για πολλές από τις ανάγκες ανάπτυξης, εντοπισμού σφαλμάτων και ανάλυσης απόδοσης του προγραμματιστή Java.

Πρόσθετες αναφορές

⇒ Αντιμετώπιση προβλημάτων Java SE

Guide Οδηγός αντιμετώπισης προβλημάτων για Java SE 6 με HotSpot JVM (PDF)

White Λευκή Βίβλος απόδοσης Java SE 6

⇒ Τι υπάρχει στο My Java Heap;

⇒ Ανάλυση Java Heaps με jmap και jhat

⇒ Προφίλ μνήμης Java με jmap και jhat

Αυτή η ιστορία, "Heap Dump and Analysis with VisualVM" δημοσιεύθηκε αρχικά από την JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found