Berbagi teknologi

Ide pemecahan masalah kebocoran memori off-heap dan pembagian kasus

2024-07-12

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

Referensi:

①Gunakan mtrace untuk melacak kebocoran memori off-heap JVM

②Kasus pemecahan masalah penggunaan memori Java yang tinggi

1. Ide investigasi

Dapatkan lokasi kebocoran memori (lihat bahan referensi ① untuk perintah rinci)

  1. Gunakan jna untuk mengaktifkan mtrace dalam kode Java untuk melacak alokasi memori

  2. Gunakan perintah mtrace untuk menganalisis file log dan mendapatkan titik panggilan kebocoran memori.

  3. arthas memeriksa tumpukan panggilan titik panggilan kebocoran memori (Anda dapat menggunakan alamat titik panggilan secara langsung, tidak diperlukan nama fungsi)

Dapatkan konten kebocoran memori (lihat bahan referensi ② untuk perintah detail)

  1. Jalankan perintah pmap untuk pertama kalinya untuk mendapatkan penggunaan memori proses Java
  2. Setelah jangka waktu tertentu, memori bertambah. Jalankan perintah pmap lagi untuk mendapatkan penggunaan memori proses Java.
  3. Gunakan alat perbandingan teks untuk membandingkan keluaran dari dua perintah pmap sebelum dan sesudah
  4. Transkode untuk melihat konten data dari memori yang baru ditambahkan

2. Pembagian kasus

Saat menguji layanan offline, ketika QPS tinggi, memori yang ditempati oleh area nio.directbuffer mesin akan tiba-tiba meningkat, menyebabkan terjadinya OOM di dalam container.

Dengan menggunakan ide pemecahan masalah di atas, kami akhirnya menentukan bahwa kerangka RPC kami menghasilkan sejumlah besar data di area directbuffer. Faktanya, ketika QPS tinggi, jumlah thread pemilih sedikit dan kapasitas konsumsi tidak mencukupi, mengakibatkan simpanan data permintaan dan respons di area directbuffer.