Bagaimana mengukur memori tanpa halaman copy-on-write?
8
Bagaimana seseorang dapat mengukur total memori RSS yang ditempati oleh serangkaian proses (bercabang), tanpa penghitungan ganda halaman yang dibagi dan disalin?
Pertanyaan yang sangat menarik, +1 - ini seharusnya dapat dilakukan dengan menganalisis /proc/*/mapfile lebih dalam, meskipun saya tidak pernah menemukan alat yang bisa melakukan itu. Masalah utama adalah bahwa struktur data yang harus diikuti jauh lebih kompleks. Jika Anda tidak mendapatkan jawaban yang bagus di sini, mungkin Anda dapat mencoba unix SE juga.
Saya menjalankannya terhadap init(pid 1) untuk pengujian dan total yang dilaporkan kira-kira sama dengan penggunaan ram fisik (seperti per htop), jadi saya kira itu agak benar.
Tidak ada cara yang jelas untuk menentukan dalam alat apa pun yang saya tahu proses mana yang berbagi peta mana tanpa mengulangi semua pemetaan dan membandingkan alamat.
Namun, linux memang menawarkan estimasi yang masuk akal yang dikenal sebagai ukuran set Proporsional . Ini dilaporkan di / proc / [pid]> / maps.
Nilai ini adalah ukuran pemetaan dibagi dengan jumlah proses saudara / orang tua dengan pemetaan yang sama terbuka.
Jadi, dengan program yang memiliki pemetaan 1MiB terbuka, ditambah 1MiB dibagi dengan 4 proses lainnya, ukuran set proporsional adalah 1MiB + (1Mib / 4) atau 1.250 MiB. RSS dalam hal ini adalah 2MiB.
Ada tambalan untuk htop mengambang di sekitar yang akan menggunakan PSS untuk menghitung 'perkiraan baik' dari memori aktual yang digunakan.
/proc/*/map
file lebih dalam, meskipun saya tidak pernah menemukan alat yang bisa melakukan itu. Masalah utama adalah bahwa struktur data yang harus diikuti jauh lebih kompleks. Jika Anda tidak mendapatkan jawaban yang bagus di sini, mungkin Anda dapat mencoba unix SE juga.Jawaban:
Saya akhirnya menulis utilitas saya sendiri untuk ini: https://gist.github.com/Eugeny/04ccfe8accf4bc74b0ca
Saya menjalankannya terhadap
init
(pid 1) untuk pengujian dan total yang dilaporkan kira-kira sama dengan penggunaan ram fisik (seperti per htop), jadi saya kira itu agak benar.Contoh penggunaan:
sumber
Tidak ada cara yang jelas untuk menentukan dalam alat apa pun yang saya tahu proses mana yang berbagi peta mana tanpa mengulangi semua pemetaan dan membandingkan alamat.
Namun, linux memang menawarkan estimasi yang masuk akal yang dikenal sebagai ukuran set Proporsional . Ini dilaporkan di / proc / [pid]> / maps.
Nilai ini adalah ukuran pemetaan dibagi dengan jumlah proses saudara / orang tua dengan pemetaan yang sama terbuka.
Jadi, dengan program yang memiliki pemetaan 1MiB terbuka, ditambah 1MiB dibagi dengan 4 proses lainnya, ukuran set proporsional adalah 1MiB + (1Mib / 4) atau 1.250 MiB. RSS dalam hal ini adalah 2MiB.
Ada tambalan untuk htop mengambang di sekitar yang akan menggunakan PSS untuk menghitung 'perkiraan baik' dari memori aktual yang digunakan.
sumber