Κοινή χρήση τεχνολογίας

Ιδέες αντιμετώπισης προβλημάτων διαρροής μνήμης εκτός σωρού και κοινή χρήση περιπτώσεων

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Βιβλιογραφικές αναφορές:

①Χρησιμοποιήστε mtrace για να παρακολουθείτε τις διαρροές μνήμης JVM off-heap

②Μια περίπτωση αντιμετώπισης προβλημάτων υψηλής χρήσης μνήμης Java

1. Ιδέες έρευνας

Λάβετε τη θέση διαρροής μνήμης (δείτε υλικά αναφοράς ① για λεπτομερείς εντολές)

  1. Χρησιμοποιήστε το jna για να ενεργοποιήσετε το mtrace στον κώδικα Java για την παρακολούθηση της εκχώρησης μνήμης

  2. Χρησιμοποιήστε την εντολή mtrace για να αναλύσετε αρχεία καταγραφής και να λάβετε σημεία κλήσης διαρροής μνήμης.

  3. arthas ελέγξτε τη στοίβα κλήσεων του σημείου κλήσης διαρροής μνήμης (μπορείτε να χρησιμοποιήσετε τη διεύθυνση του σημείου κλήσης απευθείας, δεν απαιτείται όνομα συνάρτησης)

Λάβετε περιεχόμενο διαρροής μνήμης (δείτε υλικά αναφοράς ② για λεπτομερείς εντολές)

  1. Εκτελέστε την εντολή pmap για πρώτη φορά για να αποκτήσετε τη χρήση μνήμης της διαδικασίας Java
  2. Μετά από μια χρονική περίοδο, η μνήμη αυξάνεται εκτελέστε ξανά την εντολή pmap για να λάβετε τη χρήση της μνήμης της διαδικασίας Java.
  3. Χρησιμοποιήστε το εργαλείο σύγκρισης κειμένου για να συγκρίνετε την έξοδο των δύο εντολών pmap πριν και μετά
  4. Μετακωδικοποιήστε για να δείτε το περιεχόμενο δεδομένων της μνήμης που προστέθηκε πρόσφατα

2. Κοινή χρήση υπόθεσης

Κατά τη δοκιμή μιας υπηρεσίας εκτός σύνδεσης, όταν το QPS είναι υψηλό, η μνήμη που καταλαμβάνεται από την περιοχή nio.direct buffer του μηχανήματος θα αυξηθεί ξαφνικά, προκαλώντας την εμφάνιση OOM στο κοντέινερ.

Χρησιμοποιώντας τις παραπάνω ιδέες αντιμετώπισης προβλημάτων, τελικά προσδιορίσαμε ότι το πλαίσιο RPC μας παρήγαγε μεγάλο όγκο δεδομένων στην περιοχή directbuffer. Πράγματι, όταν το QPS είναι υψηλό, ο αριθμός των νημάτων επιλογής είναι μικρός και η χωρητικότητα κατανάλωσης ανεπαρκής, με αποτέλεσμα να υπάρχει συσσώρευση δεδομένων αιτήματος και απόκρισης στην περιοχή directbuffer.