Menulis log penggunaan CPU / RAM selama periode waktu untuk mengajukan pada CentOS

8

Saya sedang mencari aplikasi atau baris kode yang akan membiarkan saya mengamati suatu proses, menyimpan info dalam sejumlah variabel, kemudian meletakkan info yang dikumpulkan pada file.

Saya sudah mencoba dengan variasi toptetapi tidak berhasil. Saya menjalankan beberapa server virtual CentOS, VM adalah RAM 2GB, 2 prosesor.

Sebuah skrip yang berfungsi lebih dari jumlah waktu tertentu saat menulis baris dengan info pada file teks sehingga pada akhirnya saya dapat memiliki semacam tabel dengan data yang akan berfungsi.

Saya akan stress test server, dan saya ingin memiliki data untuk membuat beberapa statistik.

keponk
sumber

Jawaban:

11

Standarnya pssudah cukup.

while true; do ps o pcpu,rsz -p $pid | tail -n1 >>usage.log; sleep $interval; done

hasil:

0.0  3352
0.3 31640
0.4 36924
0.5 36052
...

Bidang pertama adalah penggunaan CPU dalam%, kedua adalah penggunaan memori fisik dalam kbytes.

whitequark
sumber
thatas perfect, saya sudah membuat skrip panjang untuk membersihkan semua data dari output batch atas, tetapi cara ini lebih sederhana dan efektif saya menghargai ta lot, terima kasih!
keponk
pada akhirnya saya terus menggunakan skrip saya, karena ps memberi saya rata-rata beban yang biasanya sama dengan CPU% tetapi bukan aturan, info lebih lanjut tentang ini dalam pencarian google cepat
keponk
1
% CPU di sini bukan% yang digunakan selama interval, tetapi persentase rata-rata selama seluruh waktu program berjalan. Saya percaya ini menyesatkan.
Will Sewell
2

Jika Anda peduli tentang ketepatan waktu dan ingin CPU dalam persentase:

watch --precise -n 1 'top -b -n 1 -p [PID] | tail -n 1 | awk "{print \$9}" >> [PID].log'
Aalex Gabi
sumber
1

Saya akan menyarankan sadc/ sar.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
Bukankah hanya untuk seluruh sistem?
whitequark
@whitequark: Tergantung pada versi sar. Beberapa versi menggunakan yang sar -x PIDlain gunakan pidstat -p PID.
Dijeda sampai pemberitahuan lebih lanjut.
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
saji89
0

Anda mencoba mengamati berapa lama waktu proses yang diperlukan.

Saya akan menyarankan alat stat CPU untuk CentOS? tetapi ini membuatnya untuk seluruh sistem, bukan hanya satu proses.

Setiap proses akan menunjukkan waktu CPU dalam output ps:

$ ps -ef | egrep blah
root     13988 11152  0 Dec16 ?        00:00:05 sshd: xxx [priv]
xxx      14024 13988  0 Dec16 ?        00:06:00 sshd: xxx@pts/0
xxx      14032 14024  0 Dec16 pts/0    07:00:00 -bash
root      1194   679  0 Apr24 ?        2-05:15:14 [kswapd0]
root      1195   679  0 Apr24 ?        2-06:35:49 [kswapd1]
  • 00:00:00 adalah jam / menit / detik cpu. Itu akan menumpuk.
  • Anda akan memerlukan izin untuk melihat ini jika pengguna bukan Anda.
  • Setelah nilai ini melampaui satu hari format berubah; diatas 2 hari. Rutin parsing Anda harus menangani ini.

Pada titik ini, parsing output dengan Python, kerjakan beberapa tanggal matematika di atasnya, dan Anda emas.

Kevin J. Rice
sumber
0

Perintah berikut mendapatkan rata-rata penggunaan CPU dan memori setiap 40 detik untuk proses tertentu (pid)

pidstat 40 -ru -p <pid>

Output untuk kasus saya (dua baris pertama untuk penggunaan CPU, dua baris kedua untuk memori):

02:15:07 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:15:47 PM     24563    0.65    0.07    0.00    0.73     3  java

02:15:07 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
02:15:47 PM     24563      6.95      0.00 13047972 2123268   6.52  java
Celik
sumber