Katakanlah saya memiliki 20 pengguna yang masuk ke kotak linux saya. Bagaimana saya bisa tahu berapa banyak memori yang digunakan masing-masing?
20
Anda dapat mencoba menggunakan smem (lihat ELC2009: Visualisasikan penggunaan memori dengan smem untuk informasi lebih lanjut). Secara khusus, sudo smem -u
harus memberi Anda informasi yang Anda inginkan.
--no-install-recommends
.Mengabaikan masalah memori yang dibagikan, inilah skrip cepat yang memberi Anda RSS dan VMEM untuk semua pengguna yang masuk, diurutkan berdasarkan vmem, dan disusun dalam kolom lucu:
sumber
Untuk mendapatkan jumlah RSS saya pikir ini berfungsi. Ini untuk mendapatkan jumlah RSS untuk pengguna yang kbrandt dan root.
sumber
Itu pertanyaan yang sulit. Anda dapat dengan mudah merangkum jumlah total RSS + swap dalam output "ps", tetapi bagaimana dengan memori bersama? Pengguna yang berbeda dapat dengan mudah berbagi halaman kode yang sama jika mereka menjalankan proses yang sama. Kepada siapa Anda bertanggung jawab? Bagaimana dengan buffer dan cache? Ini benar-benar tergantung pada seberapa akurat hasil yang Anda inginkan. Semakin akurat yang Anda inginkan, akan semakin sulit.
sumber
Saya tidak yakin bagaimana melaporkan penggunaan memori oleh pengguna tetapi jika Anda khawatir tentang mengontrol penggunaannya maka Anda harus mencari ulimit. Ini akan memungkinkan Anda untuk menetapkan batas keras dan lunak pada basis per pengguna / grup untuk memori dan sumber daya lainnya pada sistem Anda.
sumber
Anda dapat mencoba sesuatu seperti:
sumber
ps aux | grep mysql | awk '{memory +=$4}; END {print memory }'
, di mana mysql dapat diganti dengan nama pengguna atau proses.Mencari hal yang sama, saya menemukan ini
untuk mencetak proses yang dipesan dengan mem, dikelompokkan berdasarkan pengguna (kolom1, $ 1), Anda dapat mengelompokkan berdasarkan hal-hal lain, dan menjumlahkan hal-hal lain, mengubah $ 1 dan $ 4
Saya senang menemukan solusinya, hanya ingin berbagi.
sumber
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2
. Perintah sortir membutuhkan-n
flag untuk membuatnya mem-parsing memori sebagai angka. Juga dengan cara ini Anda dapat mengganti kata "pengguna" dengan "perintah" untuk dikelompokkan berdasarkan nama aplikasi.Skrip bash ini mungkin jelek sekali, tapi terima kasih atas latihannya, bash-ku sudah berkarat!
Hasil:
Mohon komentar / koreksi dan saya akan memperbarui jawabannya. Saya juga menggunakan output memori rss dari PS, karena orang lain telah membahas ada pro / kontra untuk menggunakan nilai ini.
sumber
smem tidak tersedia di sistem saya, dan skrip Dave tidak berfungsi karena suatu alasan, jadi saya menulis oneliner Perl jelek ini untuk memproses keluaran ps:
Perhatikan bahwa beberapa pengguna diidentifikasi menggunakan UID mereka daripada nama pengguna mereka. Anda bisa mengatasinya dengan mem-parsing nama pengguna dari / etc / passwd, menggunakan uglier:
sumber
Menggunakan Bash Script
KELUARAN
sumber
Anda bisa mendapatkan UID dari
/etc/passwd
untuk melakukan ini untuk semua penggunasumber
Nah, pada kondisi kernel Linux ini saya hanya dapat memikirkan satu cara yang tepat untuk menyelesaikan tugas ini - menggunakan cgroup memori. Anda harus memasukkan pengguna saat login ke cgroup sendiri, dan ini mungkin memerlukan pengembangan modul pam sendiri atau (lebih tepatnya) memodifikasi modul yang ada untuk itu.
Dokumen yang bermanfaat untuk dibaca adalah: Panduan Manajemen Sumberdaya oleh RedHat®.
sumber