GNU/Linux >> Belajar Linux >  >> Linux

Linux – Perlu Penjelasan Tentang Ukuran Resident Set/Ukuran virtual?

Saya menemukan bahwa pidstat akan menjadi alat yang baik untuk memantau proses. Saya ingin menghitung penggunaan memori rata-rata dari proses tertentu. Berikut adalah beberapa contoh output:

02:34:36 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:34:37 PM      7276      2.00      0.00  349212 210176   7.14  scalpel

(Ini adalah bagian dari output dari pidstat -r -p 7276 .)

Haruskah saya menggunakan informasi Resident Set Size (RSS) atau Virtual Size (VSZ) untuk menghitung konsumsi memori rata-rata? Saya telah membaca beberapa hal di Wikipedia dan di forum tetapi saya tidak yakin untuk sepenuhnya memahami perbedaannya. Plus, sepertinya tidak ada yang bisa diandalkan. Jadi, bagaimana saya bisa memantau suatu proses untuk mendapatkan penggunaan memorinya?

Bantuan apa pun tentang masalah ini akan berguna.

Jawaban yang Diterima:

RSS adalah berapa banyak memori yang saat ini dimiliki oleh proses ini di memori utama (RAM). VSZ adalah jumlah total memori virtual yang dimiliki proses. Ini mencakup semua jenis memori, baik dalam RAM maupun yang ditukar. Angka-angka ini bisa miring karena mereka juga menyertakan perpustakaan bersama dan jenis memori lainnya. Anda dapat memiliki lima ratus instance bash berjalan, dan ukuran total jejak memori mereka tidak akan menjadi jumlah nilai RSS atau VSZ mereka.

Jika Anda perlu mendapatkan ide yang lebih mendetail tentang jejak memori suatu proses, Anda memiliki beberapa opsi. Anda dapat melalui /proc/$PID/map dan singkirkan hal-hal yang tidak Anda sukai. Jika itu adalah perpustakaan bersama, perhitungannya bisa menjadi rumit tergantung pada kebutuhan Anda (yang saya pikir saya ingat).

Jika Anda hanya peduli dengan ukuran tumpukan proses, Anda selalu dapat mengurai [heap] entri di map mengajukan. Ukuran yang telah dialokasikan kernel untuk tumpukan proses mungkin atau mungkin tidak mencerminkan jumlah byte yang tepat yang diminta oleh proses untuk dialokasikan. Ada detail kecil, internal kernel, dan pengoptimalan yang dapat menghilangkan ini. Di dunia yang ideal, itu akan sebanyak yang dibutuhkan proses Anda, dibulatkan ke kelipatan terdekat dari ukuran halaman sistem (getconf PAGESIZE akan memberi tahu Anda apa itu — di PC, mungkin 4.096 byte).

Jika Anda ingin melihat berapa banyak memori yang telah dialokasikan , salah satu cara terbaik adalah mengabaikan metrik sisi kernel. Sebagai gantinya, Anda melengkapi fungsi memori heap (de)allocation library C dengan LD_PRELOAD mekanisme. Secara pribadi, saya sedikit menyalahgunakan valgrind untuk mendapatkan informasi tentang hal semacam ini. (Perhatikan bahwa menerapkan instrumentasi akan memerlukan proses ulang.)

Terkait:Linux – Saya tidak sengaja menghapus folder /root dan sekarang string shell berbeda. Apa yang memberi?

Harap perhatikan, karena Anda mungkin juga membuat benchmark runtime, valgrind akan membuat program Anda sedikit lebih lambat (tetapi mungkin dalam batas toleransi Anda).


Linux
  1. Jumlah maksimum utas per proses di Linux?

  2. Penggunaan memori puncak dari proses linux/unix

  3. Penggunaan memori dari proses saat ini di C

  1. Cara memeriksa ukuran heap untuk suatu proses di Linux

  2. mencatat memori RAM tanda air tinggi dari proses Linux

  3. Grafik penggunaan memori proses di Linux

  1. Perintah Linux:menjelajahi memori virtual dengan vmstat

  2. Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

  3. Buang memori proses linux ke file