Apakah ada alat yang akan menjalankan baris perintah dan melaporkan total penggunaan RAM puncak?
Saya membayangkan sesuatu yang analog dengan / usr / bin / time
linux
command-line
memory-management
jes5199
sumber
sumber
[ Sunting : Bekerja pada Ubuntu 14.04:
/usr/bin/time -v command
Pastikan untuk menggunakan path lengkap.]Sepertinya
/usr/bin/time
memberi Anda informasi itu, jika Anda lulus-v
(ini ada di Ubuntu 8.10). Lihat, misalnya, diMaximum resident set size
bawah:sumber
/bin/time -v
menyelesaikannya.time -l
di MacOS, berikan output yang serupa.(Ini adalah pertanyaan lama yang sudah dijawab .. tetapi hanya untuk catatan :)
Saya terinspirasi oleh naskah Yang, dan muncul dengan alat kecil ini, bernama memusg . Saya hanya meningkatkan laju sampling menjadi 0,1 untuk menangani banyak proses kehidupan pendek. Alih-alih memantau satu proses, saya membuatnya mengukur jumlah grup proses. (Ya, saya menulis banyak program terpisah yang bekerja bersama-sama) Saat ini berfungsi pada Mac OS X dan Linux. Penggunaannya harus serupa dengan
time
:Ini hanya menunjukkan puncak untuk saat ini, tetapi saya tertarik pada sedikit ekstensi untuk merekam statistik (kasar) lainnya.
Adalah baik untuk memiliki alat sederhana seperti itu hanya untuk melihatnya sebelum kita memulai pembuatan profil yang serius.
sumber
ps -o rss=
mana rss adalah memori nyata (resident set) ukuran proses (dalam 1024 byte unit) dari halaman manual BSD saya.Valgrind one-liner:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Perhatikan penggunaan - halaman-sebagai-tumpukan untuk mengukur semua memori dalam suatu proses. Info lebih lanjut di sini: http://valgrind.org/docs/manual/ms-manual.html
sumber
time
, Saya meninggalkan anda.valgrind --massif
. Anda juga dapat menggunakanms_print
alat yang menyertainya untuk keluaran praktis (termasuk grafik penggunaan ascii dari waktu ke waktu)time
sekalipun, mengambil setidaknya 10 kali lebih banyak waktu pada perintah sepertils
.Di Linux:
Gunakan
/usr/bin/time -v <program> <args>
dan cari " Ukuran set penduduk maksimum ".(Jangan bingung dengan perintah
time
built-in Bash ! Jadi gunakan path lengkap ,/usr/bin/time
)Sebagai contoh:
Di BSD, MacOS:
Gunakan
/usr/bin/time -l <program> <args>
, cari " ukuran set penduduk maksimum ":sumber
sudo apt-get install time
Mungkin (gnu) waktu (1) sudah melakukan apa yang Anda inginkan. Contohnya:
Tetapi alat profil lain mungkin memberikan hasil yang lebih akurat tergantung pada apa yang Anda cari.
sumber
time
adalah perintah bawaan saat menggunakancsh
. Jika Anda menggunakan jalur yang tepat, itu akan memungkinkan Anda untuk menjalankan perintah eksternal. Sejauh yang saya tahu, hanya versi GNU yang mendukung opsi format./ usr / bin / waktu mungkin melakukan apa yang Anda inginkan, sebenarnya. Sesuatu seperti.
Lihat waktu (1) untuk detail ...
sumber
Di MacOS Sierra, gunakan:
Anda dapat menggunakan
grep
untuk mengambil apa yang Anda inginkan.sumber
command time -l
alih-alih/usr/bin/time -l
yang akan menyebabkan shell Anda benar-benar memanggil biner yang disebuttime
alih-alih fungsi builtin. (Ya,command
bukan pengganti,command time
berbeda dari adiltime
.)Jika proses berjalan setidaknya beberapa detik, maka Anda dapat menggunakan skrip bash berikut, yang akan menjalankan baris perintah yang diberikan kemudian mencetak ke stderr RSS puncak (pengganti untuk
rss
atribut lain yang Anda minati). Ini agak ringan, dan bekerja untuk saya dengan yangps
termasuk dalam Ubuntu 9.04 (yang saya tidak bisa mengatakannyatime
).sumber
sumber
Nah, jika Anda benar-benar ingin menunjukkan puncak memori dan beberapa statistik yang lebih mendalam saya sarankan menggunakan profiler seperti valgrind . Front-end valgrind yang bagus adalah alleyoop .
sumber
Anda dapat menggunakan alat seperti Valgrind untuk melakukan ini.
sumber
Berikut ini (berdasarkan jawaban lain) naskah yang sangat sederhana yang mengawasi proses yang sudah berjalan. Anda cukup menjalankannya dengan pid dari proses yang ingin Anda tonton sebagai argumen:
Contoh penggunaan:
sumber
Gunakan Massif: http://valgrind.org/docs/manual/ms-manual.html
sumber
Heaptrack adalah alat KDE yang memiliki antarmuka GUI dan teks. Saya merasa lebih cocok daripada valgrind untuk memahami penggunaan memori dari suatu proses karena memberikan lebih banyak detail dan flamegraf. Ini juga lebih cepat karena kurang memeriksa valgrind itu. Dan itu memberi Anda penggunaan memori puncak.
Bagaimanapun, melacak rss dan vss adalah menyesatkan karena halaman dapat dibagikan, itu sebabnya
memusg
. Apa yang Anda benar-benar harus Anda lakukan adalah melacak jumlahPss
di/proc/[pid]/smaps
atau penggunaanpmap
. Monitor sistem GNOME biasa melakukannya tetapi terlalu mahal.sumber
Menemukan kembali roda, dengan skrip bash buatan tangan. Cepat dan bersih.
Kasus penggunaan saya: Saya ingin memantau mesin linux yang memiliki RAM lebih sedikit dan ingin mengambil snapshot dari penggunaan per kontainer ketika itu berjalan di bawah penggunaan yang berat.
Output sampel:
sumber
Di macOS, Anda bisa menggunakan DTrace. Aplikasi "Instrumen" adalah GUI yang bagus untuk itu, ia datang dengan XCode afaik.
sumber
'htop' adalah perintah terbaik untuk melihat proses mana yang menggunakan berapa banyak RAM .....
untuk lebih detail http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
sumber
Maaf, saya pertama kali di sini dan hanya bisa bertanya ...
Disarankan disarankan:
kemudian:
ini sangat berbeda dari yang
top
diperlihatkan oleh perintah pada saat yang sama:apa yang diukur unit dari Valgrind ??
Yang
/usr/bin/time -v ./test.sh
tidak pernah dijawab - Anda harus langsung memberi makan executable agar/usr/bin/time
menyukai:sumber