Penggunaan CPU Linux dan Riwayat Proses Eksekusi

38

Apakah ada cara untuk melihat proses apa yang menyebabkan penggunaan CPU paling banyak?

Saya memiliki AMAZON EC2 Linux yang utilisasi CPUnya mencapai 100 persen dan membuat saya untuk reboot sistem. Saya bahkan tidak bisa masuk melalui SSH (Menggunakan dempul).

Apakah ada cara untuk melihat apa yang menyebabkan penggunaan CPU setinggi itu dan proses apa yang menyebabkannya?

Saya tahu tentang sardan topperintah tetapi saya tidak dapat menemukan sejarah proses eksekusi di mana saja. Ini adalah gambar dari alat pemantauan Amazon EC2, tapi saya ingin tahu proses mana yang menyebabkannya:

masukkan deskripsi gambar di sini

Saya juga sudah mencoba ps -eo pcpu,args | sort -k 1 -r | head -100tetapi tidak beruntung menemukan penggunaan CPU yang tinggi.

Diragukan
sumber

Jawaban:

34

Ada beberapa cara yang memungkinkan Anda untuk melakukan ini. Perhatikan bahwa sangat mungkin banyak prosesnya dalam skenario pelarian yang menyebabkan ini, bukan hanya satu.

Cara pertama adalah mengatur pidstat untuk berjalan di latar belakang dan menghasilkan data.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Ini akan memberi Anda gambaran yang cukup rinci tentang jalannya sistem pada interval sepuluh menit. Saya akan menyarankan ini menjadi pelabuhan panggilan pertama Anda karena ini menghasilkan data yang paling berharga / dapat diandalkan untuk bekerja dengannya.

Ada masalah dengan ini, terutama jika kotak masuk ke loop cpu pelarian dan menghasilkan beban besar - Anda tidak dijamin bahwa proses Anda yang sebenarnya akan dieksekusi tepat waktu selama memuat (jika sama sekali) sehingga Anda benar-benar dapat kehilangan output !

Cara kedua untuk mencari ini adalah mengaktifkan proses akuntansi. Mungkin lebih dari opsi jangka panjang.

accton on

Ini akan memungkinkan proses akuntansi (jika belum ditambahkan). Jika tidak berjalan sebelum ini perlu waktu untuk berjalan.

Setelah dijalankan, misalnya 24 jam - Anda kemudian dapat menjalankan perintah seperti itu (yang akan menghasilkan output seperti ini)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Kolom disusun seperti itu:

  1. Jumlah panggilan
  2. Persentase panggilan
  3. Jumlah waktu nyata yang dihabiskan untuk semua proses jenis ini.
  4. Persentase.
  5. Waktu CPU pengguna
  6. Persentase
  7. Waktu sistem CPU.
  8. Panggilan IO rata-rata.
  9. Persentase
  10. Nama perintah

Apa yang akan Anda cari adalah jenis proses yang menghasilkan waktu CPU Pengguna / Sistem terbanyak.

Ini memecah data sebagai jumlah total waktu CPU (baris atas) dan kemudian bagaimana waktu CPU telah dibagi. Memproses akuntansi hanya memperhitungkan dengan benar saat proses menyala, sehingga mungkin yang terbaik untuk me-restart sistem setelah memungkinkannya untuk memastikan semua layanan dicatat.

Ini, sama sekali tidak benar-benar memberi Anda ide pasti proses apa yang mungkin menjadi penyebab masalah ini, tetapi mungkin memberi Anda perasaan yang baik. Karena ini bisa menjadi snapshot 24 jam, ada kemungkinan hasil yang miring jadi ingatlah itu. Itu juga harus selalu login karena fitur kernel dan tidak seperti pidstat akan selalu menghasilkan output bahkan selama beban berat.

Opsi terakhir yang tersedia juga menggunakan akuntansi proses sehingga Anda dapat mengaktifkannya seperti di atas, tetapi kemudian gunakan program "lastcomm" untuk menghasilkan beberapa statistik proses yang dieksekusi sekitar waktu masalah bersama dengan statistik cpu untuk setiap proses.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Ini mungkin memberi Anda beberapa petunjuk juga tentang apa yang mungkin menyebabkan masalah.

Matthew Ife
sumber
Jawaban yang sangat bagus & terinci, kerja bagus!
Bart De Vos
2
MIfe, itu yang belum Anda gunakan di atasnya, cobalah! Ia mengumpulkan informasi yang sama dengan pidstat tetapi menyajikannya dalam antarmuka yang jauh lebih cocok untuk eksplorasi interaktif. Ini juga memiliki perintah atopsar jika Anda lebih suka laporan gaya sar.
sciurus
18

Di atas adalah daemon yang sangat berguna untuk melihat drill-down ke tingkat proses dan secara default mengarsipkan data ini selama 28 hari. Selain menghadirkan antarmuka pemantauan waktu nyata yang mengagumkan, Anda dapat menentukan file-file log yang akan dibuka dan melangkahinya.

The Artikel memberikan beberapa gagasan tentang kemampuan, dan Anda dapat menemukan lebih banyak di manualnya .

Ini benar-benar software yang luar biasa.

Jeff Ferland
sumber
3

Program seperti psmon dan monit mungkin bermanfaat bagi Anda. Mereka dapat memonitor proses yang berjalan di sistem Anda dan jika ada ambang batas (penggunaan CPU, penggunaan memori ...) terlampaui, Anda dapat mengaturnya mengirimi Anda laporan email tentang apa yang terjadi.

Dimungkinkan juga untuk memulai kembali proses perilaku buruk secara otomatis.

Janne Pikkarainen
sumber
0

Salah satu solusinya adalah menulis skrip yang dijalankan melalui cron satu menit atau dalam loop tidur, dan mengirimkan Anda pekerjaan email / scp / dump ke volume ebs ... dengan output yang relevan (dmesg, pstree -pa dan ps aux, mungkin vmstat) instan ia menemukan rata-rata beban melebihi batas tertentu ...

pemeras
sumber