GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa mengukur penggunaan memori sebenarnya dari suatu aplikasi atau proses?

Dengan ps atau alat serupa Anda hanya akan mendapatkan jumlah halaman memori yang dialokasikan oleh proses itu. Nomor ini benar, tetapi:

  • tidak mencerminkan jumlah memori sebenarnya yang digunakan oleh aplikasi, hanya jumlah memori yang dicadangkan untuknya

  • dapat menyesatkan jika halaman dibagikan, misalnya oleh beberapa utas atau menggunakan pustaka yang ditautkan secara dinamis

Jika Anda benar-benar ingin mengetahui jumlah memori yang sebenarnya digunakan aplikasi Anda, Anda perlu menjalankannya di dalam profiler. Misalnya, Valgrind dapat memberi Anda wawasan tentang jumlah memori yang digunakan, dan yang lebih penting, tentang kemungkinan kebocoran memori dalam program Anda. Alat profiler tumpukan Valgrind disebut 'massif':

Massif adalah pembuat profil tumpukan. Ini melakukan pembuatan profil heap secara mendetail dengan mengambil snapshot reguler dari heap program. Ini menghasilkan grafik yang menunjukkan penggunaan tumpukan dari waktu ke waktu, termasuk informasi tentang bagian mana dari program yang paling bertanggung jawab atas alokasi memori. Grafik dilengkapi dengan file teks atau HTML yang mencakup lebih banyak informasi untuk menentukan di mana sebagian besar memori dialokasikan. Massif menjalankan program sekitar 20x lebih lambat dari biasanya.

Sebagaimana dijelaskan dalam dokumentasi Valgrind, Anda perlu menjalankan program melalui Valgrind:

valgrind --tool=massif <executable> <arguments>

Massif menulis dump snapshot penggunaan memori (mis. massif.out.12345 ). Ini memberikan, (1) garis waktu penggunaan memori, (2) untuk setiap snapshot, catatan di mana memori program Anda dialokasikan. Alat grafis yang bagus untuk menganalisis file-file ini adalah massif-visualizer. Tapi saya menemukan ms_print , alat berbasis teks sederhana yang dikirimkan bersama Valgrind, sudah sangat membantu.

Untuk menemukan kebocoran memori, gunakan (default) memcheck alat valgrind.


Coba perintah pmap:

sudo pmap -x <process pid>

Linux
  1. Bagaimana saya bisa mengamati bandwidth memori?

  2. Bagaimana cara membatasi penggunaan memori aplikasi?

  3. Bagaimana saya bisa memesan satu blok memori dari kernel Linux?

  1. Bagaimana cara mengurangi penggunaan memori ClamAV?

  2. Bagaimana saya bisa mendapatkan waktu jam dinding dari proses yang sedang berjalan?

  3. Bagaimana penggunaan memori dilaporkan di Linux?

  1. Cara Memeriksa Penggunaan Memori Proses dengan Perintah pmap Linux

  2. Bagaimana cara menghitung penggunaan CPU dari suatu proses oleh PID di Linux dari C?

  3. Bagaimana cara melihat proses teratas yang diurutkan berdasarkan penggunaan memori yang sebenarnya?