Saya ingin mendapatkan penggunaan CPU dan memori dari satu proses di Linux - Saya tahu PID. Mudah-mudahan, saya bisa mendapatkannya setiap detik dan menuliskannya ke CSV menggunakan perintah 'watch'. Perintah apa yang dapat saya gunakan untuk mendapatkan info ini dari baris perintah Linux?
linux
shell
memory-management
cpu-usage
Supertux
sumber
sumber
Jawaban:
(Anda dapat meninggalkan "cmd" tetapi itu mungkin membantu dalam debugging).
Perhatikan bahwa ini memberikan rata-rata penggunaan CPU dari proses selama waktu berjalan.
sumber
| tail -n +2
ps
). Ini bukan penggunaan CPU tepat waktu yang sebenarnya. Ini juga bisa sangat berbeda daritop
pertunjukan apa , misalnya.ps -e -o pcpu,args
akan menunjukkan rata-rata CPU selama masa proses, yang jelas bukan yang Anda inginkan jika itu adalah proses yang berjalan lamaVarian dari jawaban kafe :
top -p <pid>
Ini secara otomatis memperbarui penggunaan CPU sehingga bagus untuk pemantauan.
sumber
pgrep
:top -p $(pgrep process_name)
Anda bisa mendapatkan hasilnya dengan nama proses menggunakan
yang
-C
pilihan memungkinkan Anda untuk menggunakan nama proses tanpa mengetahui pid itu.sumber
pid
hanya berfungsi.ps -C chrome -o pid,%cpu,%mem,cmd
Gunakan pidstat (dari sysstat - Refer Link ).
misalnya untuk memonitor kedua ID proses ini (12345 dan 11223) setiap 5 detik digunakan
sumber
pidstat
bahwa itu adalah perintah yang hebat, dan juga berguna untuk scripting!pidstat
juga memberikan rata-rata yang bagus. Sayang saya belum menemukan cara yang lebih eleganpidstat -u 1 10 | grep ^Average | sort -r -n -b -k 8,8
ps
perintah (tidak boleh digunakan):top
perintah (harus digunakan):Gunakan
top
untuk mendapatkan penggunaan CPU secara real time (interval pendek saat ini):top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'
akan bergema seperti:
78.6
-b
: Mode batch-n 2
: Jumlah iterasi, gunakan2
karena: Ketika Anda pertama kali menjalankannya, ia tidak memiliki sampel sebelumnya untuk dibandingkan, sehingga nilai awal ini adalah persentase sejak boot.-d 0.2
: Waktu tunda (dalam detik, ini adalah 200 ms)-p 6962
: Monitor-PIDstail -1
: baris terakhirawk '{print $9}'
: kolom 9-th (nomor penggunaan cpu)sumber
Luncurkan program dan pantau
Formulir ini berguna jika Anda ingin membuat tolok ukur yang dapat dieksekusi dengan mudah:
Sekarang ketika Anda menekan Ctrl + C itu keluar dari program dan berhenti memantau. Output sampel:
Terkait: /unix/554/how-to-monitor-cpu-memory-usage-of-a-single-process
Diuji pada Ubuntu 16.04.
sumber
Anda bisa menggunakan
top -b
dan mengeluarkan pid yang Anda inginkan (dengan-b
flag top berjalan dalam mode batch), atau juga menggunakan-p
flag dan menentukan pid tanpa menggunakan grep.sumber
Seperti yang dikomentari dalam jawaban caf di atas, ps dan dalam beberapa kasus pidstat akan memberi Anda rata-rata seumur hidup pCPU. Untuk mendapatkan hasil yang lebih akurat, gunakan top. Jika Anda perlu menjalankan top sekali Anda dapat menjalankan:
atau hanya untuk memproses data dan tajuk:
tanpa tajuk:
sumber
atau per proses
sumber
Untuk mendapatkan penggunaan memori hanya dari aplikasi Anda (tidak seperti perpustakaan bersama yang digunakannya, Anda perlu menggunakan antarmuka Linux smaps). Jawaban ini menjelaskannya dengan baik .
sumber
di mana kolom pertama adalah PID, penggunaan CPU kolom kedua, penggunaan memori kolom ketiga.
sumber
PID - ID Proses
etime - Proses Menjalankan / Durasi Langsung
% cpu - Penggunaan CPU
% mem - Penggunaan memori
cmd - Perintah
Ganti processname dengan proses apa pun yang ingin Anda lacak, mysql nginx php-fpm dll ...
sumber
Semua jawaban di sini hanya menampilkan persentase memori untuk PID.
Berikut adalah contoh cara mendapatkan penggunaan memori rss di KB untuk semua proses apache, ganti "grep apache" dengan "grep PID" jika Anda hanya ingin menonton PID tertentu:
Ini mencetak:
Dengan CPU%:
Keluaran:
sumber
Bagi mereka yang berjuang untuk sementara bertanya-tanya mengapa jawaban yang dipilih tidak bekerja:
Tidak ada spasi antara
%cpu,
dan%mem
.sumber
Ini adalah trik yang bagus untuk mengikuti satu atau lebih program secara real time sambil juga menonton keluaran beberapa alat lain:
watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"
sumber
Perintah berikut mendapatkan rata-rata penggunaan CPU dan memori setiap 40 detik untuk proses tertentu (pid)
Output untuk kasus saya (dua baris pertama untuk penggunaan CPU, dua baris kedua untuk memori):
sumber
(Jika Anda menggunakan MacOS 10.10, coba opsi akumulatif -c dari atas:
(Opsi ini tidak tersedia di linux lain, dicoba dengan Scientific Linux el6 dan RHEL6)
sumber
Di atas daftar keluar cpu atas dan proses memakan memori
sumber
Berdasarkan jawaban @ caf, ini bekerja dengan baik untuk saya.
Hitung rata-rata untuk PID yang diberikan:
mengukur
Pemakaian:
sumber
Penggunaan CPU dan memori dari satu proses di Linux atau Anda bisa mendapatkan 10 proses CPU yang paling banyak digunakan dengan menggunakan perintah di bawah ini
ps -aux --sort -pcpu | kepala -n 11
sumber