GNU/Linux >> Belajar Linux >  >> Linux

Alat admin super-duper Linux:pemeriksaan kesehatan

Alat pemecahan masalah sistem yang baik adalah segalanya. Namun, alat yang hebat lebih sulit ditemukan. Untungnya, Linux hadir dengan banyak program dan utilitas luar biasa yang memungkinkan Anda membuat profil, menganalisis, dan menyelesaikan masalah perilaku sistem, mulai dari kemacetan aplikasi hingga kesalahan konfigurasi dan bahkan bug. Semuanya dimulai dengan alat yang dapat mengambil metrik yang diperlukan dan memberikan data yang Anda butuhkan.

Pemeriksaan kesehatan adalah program rapi yang dapat memantau dan membuat profil proses, sehingga Anda dapat mengidentifikasi dan menyelesaikan penggunaan sumber daya berlebih - atau masalah terkait. Di mana ia menonjol dibandingkan dengan yang lain - ini bertujuan untuk menawarkan banyak aspek berguna dari data sistem secara bersamaan, sehingga Anda dapat lebih mudah mencari komponen sistem Anda, memecahkan masalah kinerja dan memperbaiki kesalahan konfigurasi di lingkungan Anda. Daripada harus menjalankan lima alat secara bersamaan, atau melakukan lima putaran untuk mendapatkan semua info yang Anda butuhkan, Anda cukup menggunakan pemeriksaan kesehatan, dan Bob adalah kerabat jauh Anda. Bagus. Baiklah, siap? Lanjutkan.

Aksi pemeriksaan kesehatan

Sebelum kita menjalankan utilitas dalam kemarahan, beberapa catatan kecil. Pertama, Anda memerlukan hak sudo untuk menjalankan alat ini, meskipun Anda dapat menjalankan aplikasi sebenarnya dalam konteks pengguna lain di sistem (dengan tanda -u). Kedua, Anda memerlukan pemahaman tentang cara kerja Linux untuk memanfaatkan hasil - Saya memiliki banyak artikel tentang topik ini, yang ditautkan lebih jauh di bawah.

Intinya, seperti yang telah saya uraikan beberapa saat yang lalu, health-check memadukan fungsionalitas dari berbagai program di bawah satu payung. Ini dengan baik memadukan elemen yang akan Anda dapatkan jika Anda menjalankan netstat, lsof, vmstat, iostat, dan memeriksa berbagai struct di bawah /proc dan /sys. Ini agak seperti dstat, yang menggabungkan kekuatan vmstat, iostat dan ifstat. Anda dapat memulai dengan menjalankan sederhana (-b flag):

sudo ./health-check -u "user" -b "binary"

Akan ada banyak keluaran, bahkan dalam mode "singkat" ini, seperti:

Penggunaan CPU (dalam hal 1 CPU):
Pengguna:34,24%, Sistem:13,30%, Total:47,54% (beban tinggi)

Pertama, Anda mendapatkan angka CPU dasar, dinormalisasi per inti (100% =1 inti penuh). Pemeriksaan kesehatan memiliki ambang internal yang akan menunjukkan apakah ini beban rendah, sedang atau tinggi. Ini hanya untuk memberi Anda gambaran tentang apa yang seharusnya Anda harapkan. Spesifiknya akan tergantung pada jenis aplikasi dan beban kerja yang Anda buat profilnya. Akan ada perbedaan antara GUI dan alat baris perintah, perangkat lunak yang membaca dari database ke yang tidak, perangkat lunak dengan banyak perpustakaan bersama, penggunaan perangkat keras, dll.

Kesalahan Laman:
Proses PID Kecil/dtk Mayor/dtk Total/dtk
1043 google-chrome 16156.46 0.25 16156.71

Kami berbicara tentang kesalahan halaman panjang lebar di masa lalu (tautan di bagian bacaan lebih lanjut di bawah). Jika Anda tidak tahu apa yang seharusnya dilakukan aplikasi Anda, angka-angka itu sendiri tidak akan memberi tahu Anda banyak. Tapi mereka bisa sangat berguna untuk studi banding, seperti dua program berbeda dari jenis yang sama, atau dua versi berbeda dari program yang sama, atau program yang sama berjalan di dua platform berbeda.

Sakelar Konteks:
13687.53 sakelar konteks/dtk (sangat tinggi)

Nilai sakelar konteks menunjukkan seberapa sering kernel melepaskan runqueue dan beralih di antara tugas. Untuk proses interaktif (seperti browser), yang memiliki komponen interaktif pengguna, Anda sebenarnya menginginkan sakelar konteks sebanyak mungkin (tugas dijalankan sesedikit mungkin), karena Anda tidak ingin tugas ini memonopoli prosesor. Faktanya, komputasi yang lama adalah tanda dari pekerjaan batch. Di sini, memiliki sedikit sakelar konteks dapat menjadi indikasi masalah dengan aplikasi interaktif (GUI) seperti browser.

Operasi I/O File:
Operasi I/O per detik:312,80 buka, 283,49 tutup, 768,71 baca,
410,83 tulis

Nilai I/O berguna jika Anda memiliki baseline, dan nilai tersebut juga bergantung pada tumpukan I/O yang mendasarinya, termasuk perangkat keras, bus, driver, pilihan sistem file, dan operasi disk lainnya yang berjalan pada waktu yang sama.

Analisis panggilan sistem jajak pendapat:
google-chrome (1043), jajak pendapat:
1555 panggilan habis waktu langsung tanpa batas waktu (intip tanpa pemblokiran)
1 panggilan jajak pendapat habis waktu berulang dengan bukan nol batas waktu
(jajak pendapat ringan)
1125 panggilan langsung dengan batas waktu segera habis tanpa batas waktu
(pengintipan polling berat)

Bagian ini adalah indikator lain dari kemungkinan interaksi pengguna dari biner yang diprofilkan. Panggilan sistem polling adalah panggilan sistem yang menunggu deskripsi file siap untuk melakukan operasi I/O. Biasanya, ini akan menunjukkan koneksi jaringan. Kami akan memeriksa ini secara lebih rinci ketika kami melakukan putaran penuh.

Memori:
Perubahan memori (K/detik):
PID Jenis Proses Ukuran RSS PSS
1043 google-chrome Stack 32.51 27.59 27.59 (berkembang
cukup cepat)
1043 google-chrome Heap 67550.94 9092.51 9112.70 (tumbuh sangat
cepat)
1043 google-chrome Dipetakan 102764.33 27296.24 18781.80 (bertumbuh sangat
cepat)

Bagi kebanyakan orang dan sebagian besar jenis aplikasi, operasi memori tidak akan begitu menarik. Beban kerja intensif memori tidak seperti biasanya di perangkat lunak desktop. Mereka bisa sangat penting untuk database dan komputasi kompleks, sesuatu yang biasanya Anda lakukan pada sistem kelas server. Tetapi kumpulan angka ini dapat digunakan untuk memeriksa perbedaan antara platform, kernel, dan versi perangkat lunak.

Buka Koneksi Jaringan:
Proses PID Proto Kirim Alamat Terima
1043 google-chrome UNIX 531.52 K 35.16 K /run/user/1000/bus
1043 google-chrome UNIX 0.00 B 88.56 K /run /systemd/journal/...
1043 soket google-chrome 64.51 K 0.00 B:[2737924]
1043 google-chrome 30.55 K 0.00 B soket:[2746558]
1043 google-chrome 3.98 K 0.00 B soket:[2742865]
...

Kumpulan angka koneksi jaringan memberi Anda hasil yang mirip dengan apa yang dilakukan netstat dan lsof, tetapi Anda juga mendapatkan nilai kirim/terima, yang bisa sangat berguna. Jika Anda mengetahui apa yang dimaksudkan untuk dilakukan oleh program dalam hal jaringan, Anda dapat membuat profil eksekusinya, dan mencari kemungkinan kesalahan konfigurasi di tumpukan jaringan.

Lari lebih lama (rinci)

Anda juga dapat memilih lebih banyak statistik (misalnya, dengan flag -c -f, tanpa flag -b). Anda akan mendapatkan hasil yang diperluas untuk setiap bagian yang telah kita bahas sebelumnya, dan ini dapat memberi Anda wawasan tambahan tentang bagaimana perilaku perangkat lunak Anda. Jika Anda menelusuri proses anak dan garpu, maka Anda dapat melihat urutan eksekusi. Statistik CPU akan dicantumkan berdasarkan penggunaan, dengan pelanggar tertinggi di bagian atas.

Penggunaan CPU (dalam hal 1 CPU):
Proses PID USR% SYS% TOTAL% Durasi
1715 vlc 47.04 8.17 55.21 14.71 (beban tinggi)
1720 vlc 46.91 7.96 54.87 14.43 (beban tinggi) )
1723 vlc 46.77 7.96 54.74 14.35 (beban tinggi)
...
1721 vlc 1,69 1,08 2,77 1,21 (beban ringan)
1722 vlc 0,20 0,07 0,27 0,16 (beban sangat ringan) )
1726 vlc 0,07 0,00 0,07 0,02 (beban sangat ringan)
1742 vlc 0,00 0,00 0,00 0,07 (idle)
1732 vlc 0,00 0,00 0,00 0,02 (idle)
1728 vlc 0,00 0,00 0,00 0,06 (idle)
1719 vlc 0,00 0,00 0,00 0,06 (idle)
Total 971,80 161,72 1133,52 (CPU terisi penuh)

Dalam contoh di atas, menjalankan VLC (dengan pemutaran klip HD sekitar 14 detik), kami menggunakan 1,133% waktu CPU, yang diterjemahkan menjadi 11,33 inti CPU. Kedengarannya banyak, tetapi karena sistem memiliki delapan inti (utas), ini berarti hanya 1,5 inti yang benar-benar digunakan untuk video. Menarik juga untuk mengetahui inti mana yang digunakan.

Sakelar Konteks:
Proses PID Sukarela Tidak Sukarela Total
Ctxt Sw/Detik Ctxt Sw/Detik Ctxt Sw/Detik
1744 vlc 2500.09 1.15 2501.24 (tinggi)
1723 vlc 1493.47 1.82 1495.29 ( tinggi)
1740 vlc 1224.03 3,31 1227,33 (tinggi)
1717 vlc 947,43 0,40 947,84 (cukup tinggi)
1731 vlc 736,37 0,81 737,18 (cukup tinggi)

Untuk kesalahan halaman, tidak ada yang baru. Dengan sakelar konteks, kami juga mendapatkan daftar CS sukarela dan tidak sukarela. Kumpulan yang terakhir dapat menjadi indikasi tugas yang melebihi irisan yang dialokasikan, yang kemudian akan mengakibatkan mereka memiliki prioritas dinamis yang lebih rendah saat dijalankan berikutnya (yang tidak baik untuk proses interaktif).

Operasi I/O File:
Proses PID Hitungan Op Nama File
1715 vlc 176 R /home/roger/developers.webm
1715 vlc 48 C /etc/ld.so.cache
1715 vlc 48 O /etc/ld.so.cache
1715 vlc 34 R /usr/share/X11/locale/locale.alias

File I/O sekarang juga menunjukkan jumlah operasi per proses, jenis operasi serta nama file. Ini tidak harus berupa file aktual di disk, ini juga bisa berupa bus. Operasi yang tersedia dicetak di bagian bawah bagian ini. Bagaimana tepatnya operasi baca dan tulis dilakukan bergantung pada banyak faktor.

...
1715 vlc 1 C /lib/x86_64-linux-gnu/libnss_systemd.so.2
1715 vlc 1 ATAU /usr/bin/vlc
Total 4352
Op :O=Buka, R=Baca, W=Tulis, C=Tutup

Anda juga mendapatkan frekuensi operasi I/O ini:

File I/O Operasi per detik:
Proses PID Buka Tutup Baca Tulis
1715 vlc 100.57 96.72 89.77 1.75
1719 vlc 3.24 4.99 3.04 0.00
...

Bagian selanjutnya adalah semua tentang panggilan sistem, dan itu sangat rinci. Outputnya mirip dengan strace. Anda akan memiliki ID proses, nama proses, panggilan sistem, jumlah, tarif, total waktu (dalam kami), dan persentase yang diambil setiap panggilan sistem dari total waktu eksekusi. Anda tidak dapat menginterpretasikan angka-angka ini kecuali Anda tahu apa yang dimaksudkan untuk dilakukan aplikasi, atau Anda dapat membandingkannya dengan garis dasar.

Panggilan sistem dilacak:
PID Proses Syscall Count Rate/Detik Total uSecs % Waktu Panggilan
1715 vlc stat 429 28.9555 3004 0.0011
1715 vlc mmap 240 16.1989 4912 0.0017
1715 vlc mprotect 203 13,7015 4739 0,0017
...

Informasi ini lebih berguna ketika Anda melihat panggilan sistem polling. Untuk singkatnya, saya telah sedikit mengedit output di bawah ini. Empat bidang terakhir semuanya menunjukkan batas waktu, misalnya:Batas Waktu Nol, Batas Waktu Minimum, dll. Pada dasarnya, mereka memberi Anda indikator berapa lama waktu yang dibutuhkan untuk menyelesaikan panggilan sistem ini. Bidang Hitungan tak terbatas mengacu pada panggilan sistem yang menunggu tak terbatas (selama aplikasi dijalankan). Informasi tersebut juga ditampilkan sebagai histogram per proses, dari nol hingga tak terhingga, dikelompokkan secara logaritmik, hingga 10us, 10-99 us, 100-99 us, dan seterusnya.

Panggilan sistem polling teratas:
PID Proses Syscall Rate/Detik Inf Nol Min Max Rata-rata
1715 vlc poll 3.2398 45 1 0.0 s 25.0 s 1.0 s
1715 vlc rt_sigtimed 0.1350 2 0 0.0 s 0.0 s 0,0 dt
1717 vlc poll 124,7312 5 1 0,0 d 30,0 d 958.4 md
...

Log keluaran yang lebih rinci juga akan memiliki data sinkronisasi sistem file.

Sinkronisasi Sistem File:
PID fdatasync fsync sync total total (Tingkat)
1723 0 2 0 0 2 0,13

Berkas Disinkronkan:
PID syscall # nama file sinkronisasi
1723 fdatasync 1 /home/roger/.../vlc-qt-interface.conf.lock
1723 fdatasync 1 /home/roger/.../vlc-qt-interface.conf.XM1715

Terakhir, detail output juga akan memiliki memori dan informasi koneksi jaringan, tetapi perbedaan utamanya adalah hasil yang ditampilkan per proses. Seperti yang telah kita diskusikan sebelumnya, yang pertama biasanya tidak berguna untuk sebagian besar beban kerja desktop (kecuali Anda adalah pengembang program), sedangkan yang kedua dapat berguna dalam menemukan masalah di tumpukan jaringan.

Pemeriksaan kesehatan menciptakan serangkaian hasil yang cukup besar, tetapi memberikan banyak wawasan tentang bagaimana aplikasi Anda berperilaku. Anda dapat menggabungkan penggunaannya dengan perangkat lunak lain untuk mendapatkan analisis lengkap perangkat lunak Anda dan memecahkan masalah kinerja apa pun. Pemeriksaan kesehatan juga dapat membuat profil tugas yang sedang berjalan (tanda -p), yang membuatnya sangat berguna sebagai tambahan untuk kotak alat pemecahan masalah Anda.

Penyiapan manual

Jika Anda tidak puas dengan versi yang tersedia di repo, Anda dapat mengompilasinya secara manual. Alasan lain untuk melakukan ini adalah untuk mengatasi kemungkinan masalah yang mungkin dimiliki versi lama, seperti misalnya kesalahan timer_stats, di mana alat mencoba mengakses /proc/timer_stats, tetapi struct ini tidak lagi diekspos di kernel terbaru:

Tidak dapat membuka /proc/timer_stats.

Memang, jika Anda memeriksa, Anda mendapatkan:

cat /proc/timer_stats
cat:/proc/timer_stats:Tidak ada file atau direktori seperti itu

Untuk mengkompilasi, jalankan:

git clone https://kernel.ubuntu.com/git/cking/health-check.git/
cd health-check
make

Anda mungkin melihat kesalahan berikut:

json.h:25:10:kesalahan fatal:json-c/json.h:Tidak ada file atau direktori seperti itu
#include

Ini berarti Anda kehilangan paket pengembangan untuk JSON, yang harus berhasil dikompilasi oleh alat. Nama sebenarnya dari paket akan bervariasi dari satu distribusi ke distribusi lainnya, tetapi dalam pengujian saya di Kubuntu, berikut ini menyelesaikan kesalahan kompilasi:

sudo apt-get install libjson-c-dev

Lebih banyak membaca

Jika Anda tertarik dengan alat tambahan pada pemecahan masalah sistem, maka:

Alat admin super-duper Linux:strace

Alat admin super-duper Linux:lsof

Alat admin super-duper Linux:gdb

Sistem lambat? Perf untuk menyelamatkan!

Tutorial super debugging sistem Linux

Peretasan keren Linux - bagian satu sampai empat - hanya menautkan yang terakhir.

Terakhir, buku pemecahan masalah saya!

Kesimpulan

Pemeriksaan kesehatan adalah alat yang sangat berguna dan praktis. Itu tidak menggantikan strace atau netstat atau perf, tetapi itu pasti dapat membantu Anda mendapatkan snapshot multi-dimensi yang sangat akurat dari apa pun yang Anda buat profil. Ini adalah langkah pertama yang sangat baik yang dapat mengarahkan Anda ke arah yang benar. Anda kemudian dapat memilih utilitas yang secara khusus memeriksa aspek relevan dari perangkat lunak yang dijalankan (mungkin Wireshark untuk jaringan atau Valgrind untuk memori). Di satu sisi, ini membuat pemeriksaan kesehatan menjadi Jack o' All Trades.

Anda memang membutuhkan pemahaman tentang cara kerja sistem Linux - dan aplikasi yang Anda jalankan. Tetapi bahkan jika Anda tidak memiliki pengetahuan itu, pemeriksaan kesehatan dapat digunakan untuk studi perbandingan dan pemecahan masalah kemacetan kinerja. Jika Anda tahu ada sesuatu yang tidak berjalan sebagaimana mestinya, Anda dapat melacaknya sekali pada sistem yang baik, sekali pada sistem yang buruk (terpengaruh), dan kemudian membandingkan keduanya. Banyaknya jenis data yang diberikan health-check akan sangat membantu dalam menyelesaikan masalah tersebut. Dan itu membawa kita ke akhir tutorial ini. Dengan sedikit keberuntungan, Anda telah mempelajari sesuatu yang baru, dan itu juga merupakan perjalanan yang menyenangkan. Hati-hati.


Linux
  1. Jalankan mesin virtual Linux di Podman

  2. 5 alat sysadmin Linux favorit saya

  3. Dasar-dasar perintah Linux:printf

  1. Linux – Menjalankan Aplikasi Mac Os X Di Linux?

  2. Linux – Bagaimana Cara Menjalankan Bootloader Dari Linux?

  3. Apakah lebih baik melakukan boot ganda atau menjalankan VM?

  1. 7 Alat Teratas yang dapat mengotomatiskan Tugas Admin Linux

  2. Jalankan perintah cd sebagai superuser di Linux

  3. Bagaimana cara menjalankan linux di PS3?