GNU/Linux >> Belajar Linux >  >> Linux

Linux – Mendapatkan Informasi Tentang Penggunaan Memori Proses Dari /proc/pid/smaps?

Untuk proses tertentu di /proc/<pid>/smaps , untuk entri pemetaan yang diberikan adalah:

  1. Bersama_Bersih
  2. Dibagi_Kotor
  3. Private_Clean
  4. Pribadi_Kotor

Apakah Shared_Clean + Shared_Dirty jumlah memori yang digunakan bersama dengan proses lain? Jadi ini seperti RSS yang dibagikan?

Demikian pula Private_Clean + Private_Dirty jumlah memori yang tersedia hanya untuk satu proses ? Jadi ini seperti RSS pribadi?

Apakah nilai PSS =PrivateRSS + (SharedRSS / jumlah proses yang membagikannya)?

Beberapa pertanyaan lagi setelah membaca tautan ini:LWN

Sekarang mari kita bicara tentang proses secara keseluruhan, yang entri petanya sedang kita lihat.

Saya perhatikan bahwa jika saya melakukan Shared_Clean + Shared_Dirty + Private_Clean + Private_Dirty untuk setiap entri smaps untuk proses saya mendapatkan RSS dari proses tersebut seperti yang
dilaporkan oleh ps , yang cukup keren. Untuk mis.

ps -p $$ -o pid,rss

Akan memberi saya (kira-kira) nilai yang sama untuk rss sebagai jumlah dari setiap Shared_Clean , Shared_Dirty , Private_Clean , Private_Dirty entri di /proc/$$/smaps.

Tapi bagaimana dengan PSS untuk seluruh proses? Jadi, dari contoh di atas bagaimana cara mendapatkan PSS untuk $$ ? Bisakah saya menambahkan entri PSS untuk setiap pemetaan peta dan tiba di PSS seharga $$?

Dan bagaimana dengan USS untuk seluruh proses? Sekali lagi mengambil contoh di atas saya menebak bahwa saya dapat tiba di USS untuk $$ dengan menjumlahkan hanya entri Private_* untuk setiap entri petas untuk $$..kan?

Catatan:
PSS=Ukuran set proporsional.
USS=Ukuran set unik.

Jawaban yang Diterima:

Halaman bersih adalah halaman yang belum dimodifikasi sejak dipetakan (biasanya, bagian teks dari pustaka bersama hanya dibaca dari disk (bila perlu), tidak pernah dimodifikasi, sehingga akan berada di halaman bersama yang bersih).
Halaman kotor adalah halaman yang tidak bersih (yaitu telah dimodifikasi).

Halaman pribadi hanya tersedia untuk proses itu, halaman bersama dipetakan oleh proses lain.

RSS adalah jumlah halaman, dibagikan atau tidak, saat ini dipetakan ke dalam proses. Jadi Shared_Clean + Shared_Dirty akan menjadi bagian RSS yang dibagikan (yaitu bagian RSS yang juga dipetakan ke dalam proses lain), dan Private_Clean + Private_Dirty bagian pribadi RSS (yaitu hanya dipetakan dalam proses ini).

PSS (ukuran saham proporsional) adalah seperti yang Anda gambarkan. Halaman pribadi diringkas apa adanya, dan setiap ukuran pemetaan bersama dibagi dengan jumlah proses yang membagikannya.
Jadi, jika suatu proses memiliki 100 ribu halaman pribadi, 500 ribu halaman dibagikan dengan satu proses lain, dan 500 ribu dibagikan dengan empat proses lainnya, PSS akan menjadi:

100k + (500k / 2) + (500k / 5) = 450k

Bacaan lebih lanjut:

  • ELC:Berapa banyak memori yang benar-benar digunakan aplikasi?
  • Documentation/filesystems/proc.txt di sumber kernel
  • man proc(5)
  • Ikhtisar Manajemen Memori Linux
  • Manajemen Memori di TLDP.org
  • LinuxMM
Terkait:Linux – untuk flag mount noauto?

Mengenai jumlah seluruh proses:

  • RSS dapat (kurang-lebih) diperoleh dengan menjumlahkan Rss: entri di smaps (Anda tidak perlu menambahkan entri bersama/pribadi bersama/kotor).

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Anda dapat menyimpulkan Pss: nilai dengan cara yang sama, untuk mendapatkan proses-global PSS .
  • USS tidak dilaporkan di smaps , tapi memang, ini adalah jumlah pemetaan pribadi, jadi Anda juga bisa mendapatkannya dengan cara yang sama

Perhatikan bahwa halaman yang “dapat dibagikan” dihitung sebagai pemetaan pribadi sampai benar-benar bersama. yaitu jika hanya ada satu proses yang saat ini menggunakan libfoo , bagian teks perpustakaan itu akan muncul di pribadi process proses pemetaan. Ini akan diperhitungkan dalam pemetaan bersama (dan dihapus dari pemetaan pribadi) hanya jika/ketika proses lain mulai menggunakan perpustakaan itu.
Nilai tidak sama persis untuk semua proses. Tidak begitu yakin mengapa… maaf.


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

  2. Linux – Bagaimana Cara Membaca Dari /proc/$pid/mem Di Linux?

  3. Linux – Menautkan /proc/mnt Ke /proc/mounts?

  1. Linux – Bagaimana Menguji Apakah Perangkat Blok Apakah Hanya-Baca Dari /sys Atau /proc?

  2. Bagaimana cara mendapatkan jalur proses di Unix / Linux

  3. /proc/[pid]/pagemaps dan /proc/[pid]/maps | linux

  1. Nama proses dari pidnya di linux

  2. Bagaimana cara mengetahui dari folder mana suatu proses sedang berjalan?

  3. Bagaimana cara membaca dari /proc/$pid/mem di Linux?