LFCS: Memantau Penggunaan Sumber Daya Proses Linux dan Menetapkan Batas Proses Berdasarkan Per Pengguna - Bagian 14


Karena perubahan terbaru dalam tujuan ujian sertifikasi LFCS yang berlaku mulai 2 Februari 2016, kami menambahkan artikel yang diperlukan ke seri LFCS yang diterbitkan di sini. Untuk mempersiapkan ujian ini, Anda sangat dianjurkan untuk mengikuti seri LFCE juga.

Setiap administrator sistem Linux perlu mengetahui cara memverifikasi integritas dan ketersediaan perangkat keras, sumber daya, dan proses utama. Selain itu, menetapkan batas sumber daya per pengguna juga harus menjadi bagian dari keahliannya.

Dalam artikel ini kita akan mengeksplorasi beberapa cara untuk memastikan bahwa sistem baik perangkat keras maupun perangkat lunak berfungsi dengan benar untuk menghindari potensi masalah yang dapat menyebabkan waktu henti produksi yang tidak terduga dan kerugian uang.

Statistik Prosesor Pelaporan Linux

Dengan mpstat Anda dapat melihat aktivitas setiap prosesor secara individual atau sistem secara keseluruhan, baik sebagai snapshot satu kali maupun secara dinamis.

Untuk menggunakan alat ini, Anda perlu menginstal sysstat:

yum update && yum install sysstat              [On CentOS based systems]
aptitutde update && aptitude install sysstat   [On Ubuntu based systems]
zypper update && zypper install sysstat        [On openSUSE systems]

Baca selengkapnya tentang sysstat dan utilitasnya di Pelajari Sysstat dan Utilitasnya mpstat, pidstat, iostat, dan sar di Linux

Setelah Anda menginstal mpstat, gunakan itu untuk menghasilkan laporan statistik prosesor.

Untuk menampilkan 3 laporan global penggunaan CPU (-u) untuk semua CPU (seperti yang ditunjukkan oleh -P ALL) pada interval 2 detik , Mengerjakan:

mpstat -P ALL -u 2 3
Contoh Keluaran
Linux 3.19.0-32-generic (linux-console.net) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:41:07  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:09  IST  all    5.85    0.00    1.12    0.12    0.00    0.00    0.00    0.00    0.00   92.91
11:41:09  IST    0    4.48    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.53
11:41:09  IST    1    2.50    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:09  IST    2    6.44    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   92.57
11:41:09  IST    3   10.45    0.00    1.99    0.00    0.00    0.00    0.00    0.00    0.00   87.56

11:41:09  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:11  IST  all   11.60    0.12    1.12    0.50    0.00    0.00    0.00    0.00    0.00   86.66
11:41:11  IST    0   10.50    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   88.50
11:41:11  IST    1   14.36    0.00    1.49    2.48    0.00    0.00    0.00    0.00    0.00   81.68
11:41:11  IST    2    2.00    0.50    1.00    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:41:11  IST    3   19.40    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   79.60

11:41:11  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:41:13  IST  all    5.69    0.00    1.24    0.00    0.00    0.00    0.00    0.00    0.00   93.07
11:41:13  IST    0    2.97    0.00    1.49    0.00    0.00    0.00    0.00    0.00    0.00   95.54
11:41:13  IST    1   10.78    0.00    1.47    0.00    0.00    0.00    0.00    0.00    0.00   87.75
11:41:13  IST    2    2.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   97.00
11:41:13  IST    3    6.93    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   92.57

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    7.71    0.04    1.16    0.21    0.00    0.00    0.00    0.00    0.00   90.89
Average:       0    5.97    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   92.87
Average:       1    9.24    0.00    1.16    0.83    0.00    0.00    0.00    0.00    0.00   88.78
Average:       2    3.49    0.17    1.00    0.00    0.00    0.00    0.00    0.00    0.00   95.35
Average:       3   12.25    0.00    1.16    0.00    0.00    0.00    0.00    0.00    0.00   86.59

Untuk melihat statistik yang sama untuk CPU tertentu (CPU 0 dalam contoh berikut), gunakan:

mpstat -P 0 -u 2 3
Contoh Keluaran
Linux 3.19.0-32-generic (linux-console.net) 	Wednesday 30 March 2016 	_x86_64_	(4 CPU)

11:42:08  IST  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:42:10  IST    0    3.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00    0.00   96.50
11:42:12  IST    0    4.08    0.00    0.00    2.55    0.00    0.00    0.00    0.00    0.00   93.37
11:42:14  IST    0    9.74    0.00    0.51    0.00    0.00    0.00    0.00    0.00    0.00   89.74
Average:       0    5.58    0.00    0.34    0.85    0.00    0.00    0.00    0.00    0.00   93.23

Output dari perintah di atas menunjukkan kolom berikut:

  1. CPU: Nomor prosesor sebagai bilangan bulat, atau kata semua sebagai rata-rata untuk semua prosesor.
  2. %usr: Persentase penggunaan CPU saat menjalankan aplikasi tingkat pengguna.
  3. %nice: Sama seperti %usr, tetapi dengan prioritas yang bagus.
  4. %sys: Persentase penggunaan CPU yang terjadi saat menjalankan aplikasi kernel. Ini tidak termasuk waktu yang dihabiskan untuk menangani interupsi atau menangani perangkat keras.
  5. %iowait: Persentase waktu ketika CPU tertentu (atau semua) menganggur, selama itu terdapat operasi I/O intensif sumber daya yang dijadwalkan pada CPU tersebut. Penjelasan lebih rinci (beserta contoh) dapat ditemukan di sini.
  6. %irq: Persentase waktu yang dihabiskan untuk melayani interupsi perangkat keras.
  7. %soft: Sama seperti %irq, tetapi dengan interupsi perangkat lunak.
  8. %steal: Persentase waktu yang dihabiskan dalam menunggu yang tidak disengaja (waktu mencuri atau dicuri) ketika mesin virtual, sebagai tamu, “memenangkan” perhatian hypervisor saat bersaing untuk mendapatkan CPU. Nilai ini harus dijaga sekecil mungkin. Nilai yang tinggi pada kolom ini berarti mesin virtual sedang terhenti – atau akan segera terhenti.
  9. %guest: Persentase waktu yang dihabiskan untuk menjalankan prosesor virtual.
  10. %idle: persentase waktu ketika CPU tidak menjalankan tugas apa pun. Jika Anda mengamati nilai yang rendah pada kolom ini, itu merupakan indikasi sistem ditempatkan di bawah beban yang berat. Dalam hal ini, Anda perlu melihat lebih dekat daftar proses, seperti yang akan kita bahas sebentar lagi, untuk menentukan penyebabnya.

Untuk menempatkan prosesor di bawah beban yang agak tinggi, jalankan perintah berikut dan kemudian jalankan mpstat (seperti yang ditunjukkan) di terminal terpisah:

dd if=/dev/zero of=test.iso bs=1G count=1
mpstat -u -P 0 2 3
ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
mpstat -u -P 0 2 3

Terakhir, bandingkan dengan keluaran mpstat dalam keadaan “normal ”:

Seperti yang Anda lihat pada gambar di atas, CPU 0 mengalami beban berat selama dua contoh pertama, seperti yang ditunjukkan oleh kolom %idle.

Pada bagian berikutnya kita akan membahas bagaimana mengidentifikasi proses-proses yang membutuhkan sumber daya ini, bagaimana memperoleh lebih banyak informasi tentang proses-proses tersebut, dan bagaimana mengambil tindakan yang tepat.

Melaporkan Proses Linux

Untuk membuat daftar proses yang mengurutkannya berdasarkan penggunaan CPU, kita akan menggunakan perintah ps yang terkenal dengan -eo (untuk memilih semua proses dengan format yang ditentukan pengguna) dan --sort (untuk menentukan urutan pengurutan khusus), seperti:

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

Perintah di atas hanya akan menampilkan PID, PPID, perintah yang terkait dengan proses, dan persentase penggunaan CPU dan RAM yang diurutkan berdasarkan persentase penggunaan CPU dalam urutan menurun . Ketika dijalankan saat pembuatan file .iso, inilah beberapa baris pertama outputnya:

Setelah kita mengidentifikasi proses yang diinginkan (misalnya proses dengan PID=2822), kita dapat menavigasi ke /proc/PID (/proc/2822 dalam hal ini) dan lakukan daftar direktori.

Direktori ini adalah tempat beberapa file dan subdirektori dengan informasi rinci tentang proses khusus ini disimpan saat sedang berjalan.

Misalnya:
  1. /proc/2822/io berisi statistik IO untuk proses tersebut (jumlah karakter dan byte yang dibaca dan ditulis, antara lain, selama operasi IO).
  2. /proc/2822/attr/current menunjukkan atribut keamanan SELinux saat ini dari proses tersebut.
  3. /proc/2822/cgroup menjelaskan grup kontrol (disingkat cgroups) yang memiliki proses jika opsi konfigurasi kernel CONFIG_CGROUPS diaktifkan, yang dapat Anda verifikasi dengan:
cat /boot/config-$(uname -r) | grep -i cgroups

Jika opsi ini diaktifkan, Anda akan melihat:

CONFIG_CGROUPS=y

Dengan menggunakan cgroups Anda dapat mengelola jumlah penggunaan sumber daya yang diizinkan per proses seperti yang dijelaskan dalam Bab 1 hingga 4 panduan Manajemen Sumber Daya Red Hat Enterprise Linux 7, di Bab 9 Analisis Sistem openSUSE dan Panduan penyetelan, dan di bagian Grup Kontrol pada dokumentasi Server Ubuntu 14.04.

/proc/2822/fd adalah direktori yang berisi satu tautan simbolik untuk setiap deskriptor file yang telah dibuka oleh proses. Gambar berikut menunjukkan informasi untuk proses yang dimulai di tty1 (terminal pertama) untuk membuat gambar .iso:

Gambar di atas menunjukkan bahwa stdin (deskriptor file 0), stdout (deskriptor file 1), dan stderr (deskriptor file 2) dipetakan ke /dev/zero, /root/test.iso, dan /dev/tty1, masing-masing.

Informasi lebih lanjut tentang /proc dapat ditemukan dalam dokumen “Sistem file /proc ” yang disimpan dan dikelola oleh Kernel.org, dan dalam Manual Pemrogram Linux.

Menetapkan Batas Sumber Daya Berdasarkan Per Pengguna di Linux

Jika Anda tidak berhati-hati dan membiarkan pengguna mana pun menjalankan proses dalam jumlah tak terbatas, pada akhirnya Anda mungkin mengalami sistem mati secara tidak terduga atau terkunci saat sistem memasuki keadaan tidak dapat digunakan. Untuk mencegah hal ini terjadi, Anda harus membatasi jumlah proses yang dapat dimulai oleh pengguna.

Untuk melakukannya, edit /etc/security/limits.conf dan tambahkan baris berikut di bagian bawah file untuk menetapkan batas:

*   	hard	nproc   10

Bidang pertama dapat digunakan untuk menunjukkan pengguna, grup, atau semuanya (*), sedangkan bidang kedua menerapkan batasan tegas pada jumlah proses (nproc) hingga 10. Untuk menerapkan perubahan, keluar dan masuk kembali saja sudah cukup.

Jadi, mari kita lihat apa yang terjadi jika pengguna tertentu selain root (baik yang sah atau tidak) mencoba memulai bom shell fork. Jika kita tidak menerapkan batasan, ini awalnya akan meluncurkan dua contoh fungsi, dan kemudian menduplikasi masing-masing fungsi tersebut dalam loop yang tidak pernah berakhir. Dengan demikian, hal itu pada akhirnya akan membuat sistem Anda merangkak.

Namun, dengan adanya pembatasan di atas, fork bomb tidak akan berhasil namun pengguna akan tetap terkunci hingga administrator sistem menghentikan proses yang terkait dengannya:

TIPS: Kemungkinan pembatasan lain yang dimungkinkan oleh ulimit didokumentasikan dalam file limits.conf.

Linux Alat Manajemen Proses Lainnya

Selain alat yang dibahas sebelumnya, administrator sistem mungkin juga perlu:

a) Memodifikasi prioritas eksekusi (penggunaan sumber daya sistem) suatu proses menggunakan renice. Ini berarti bahwa kernel akan mengalokasikan lebih banyak atau lebih sedikit sumber daya sistem ke proses berdasarkan prioritas yang ditetapkan (angka yang umumnya dikenal sebagai “kebaikan ” dalam rentang dari -20 hingga 19).

Semakin rendah nilainya, semakin besar prioritas eksekusinya. Pengguna biasa (selain root) hanya dapat mengubah kualitas proses yang mereka miliki ke nilai yang lebih tinggi (artinya prioritas eksekusi lebih rendah), sedangkan root dapat mengubah nilai ini untuk proses apa pun, dan dapat menambah atau menguranginya.

Sintaks dasar renice adalah sebagai berikut:

renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

Jika argumen setelah nilai prioritas baru tidak ada (kosong), argumen tersebut diatur ke PID secara default. Dalam hal ini, kelancaran proses dengan PID=identifier disetel ke <newpriority>.

b) Menginterupsi eksekusi normal suatu proses bila diperlukan. Hal ini umumnya dikenal sebagai “membunuh” proses. Pada dasarnya, ini berarti mengirimkan sinyal kepada proses untuk menyelesaikan eksekusinya dengan benar dan melepaskan sumber daya yang digunakan secara tertib.

Untuk menghentikan suatu proses, gunakan perintah kill sebagai berikut:

kill PID

Alternatifnya, Anda dapat menggunakan pkill untuk menghentikan semua proses dari pemilik tertentu (-u), atau pemilik grup (-G), atau bahkan proses yang memiliki PPID dalam (-P) yang umum. Opsi berikut dapat diikuti dengan representasi numerik atau nama sebenarnya sebagai pengidentifikasi:

pkill [options] identifier

Misalnya,

pkill -G 1000

akan mematikan semua proses yang dimiliki oleh grup dengan GID=1000.

Dan,

pkill -P 4993 

akan mematikan semua proses yang PPID-nya 4993.

Sebelum menjalankan pkill, ada baiknya menguji hasilnya dengan pgrep terlebih dahulu, mungkin menggunakan opsi -l juga untuk membuat daftar nama proses. Dibutuhkan opsi yang sama tetapi hanya mengembalikan PID proses (tanpa mengambil tindakan lebih lanjut) yang akan dihentikan jika pkill digunakan.

pgrep -l -u gacanepa

Hal ini diilustrasikan pada gambar berikutnya:

Ringkasan

Pada artikel ini kami telah menjelajahi beberapa cara untuk memantau penggunaan sumber daya untuk memverifikasi integritas dan ketersediaan komponen perangkat keras dan perangkat lunak penting dalam sistem Linux.

Kita juga telah belajar bagaimana mengambil tindakan yang tepat (baik dengan menyesuaikan prioritas eksekusi suatu proses atau dengan menghentikannya) dalam keadaan yang tidak biasa.

Kami berharap konsep yang dijelaskan dalam tutorial ini bermanfaat. Jika Anda memiliki pertanyaan atau komentar, jangan ragu untuk menghubungi kami menggunakan formulir kontak di bawah.