Bagaimana seseorang dapat mengukur total memori RSS yang ditempati oleh serangkaian proses (bercabang), tanpa penghitungan ganda halaman yang dibagi dan disalin?
Bagaimana seseorang dapat mengukur total memori RSS yang ditempati oleh serangkaian proses (bercabang), tanpa penghitungan ganda halaman yang dibagi dan disalin?
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:
~ » pstree -ap 15897
zsh,15897
└─sudo,9783 make rundev
└─make,9784 rundev
└─sh,9785 -c cd ajenti-panel && ./ajenti-panel -v --autologin --plugins ../plugins --dev
└─python ./ajenti,9786
├─./ajenti-panel ,9834
├─./ajenti-panel ,9795
└─{python ./ajenti},9796
~ » sudo ./memuse.py 15897
PID Commandline Frames (+unique) VMEM
- 15897 (/usr/bin/zsh ): 1776 +1776 7104 KB
- 9783 (sudo make rundev ): 608 +408 2432 KB
- 9784 (make rundev ): 261 +98 1044 KB
- 9785 (/bin/sh -c cd ajenti-panel && ): 166 +48 664 KB
- 9786 (python ./ajenti-panel -v --aut): 9279 +8977 37116 KB
- 9795 (./ajenti-panel worker [restric): 7637 +1334 30548 KB
- 9834 (./ajenti-panel worker [session): 8972 +2639 35888 KB
----------------------------------------------------------------------------------------
TOTAL: 15280 61120 KB
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.