Manajemen daftar proses dan penghentian proses otomatis

Manajemen daftar proses dan penghentian proses otomatis

Karena penggunaan/maksimalisasi optimal yang parah terus tumbuh, menjadi semakin penting untuk mengelola proses dengan baik. Salah satu aspek dari ini adalah penghentian proses otomatis. Ketika suatu proses menjadi nakal, dan mengonsumsi terlalu banyak sumber daya, itu dapat diakhiri secara otomatis.

Ini sangat cocok untuk server yang memiliki banyak proses sementara atau sekali pakai. Ini juga cocok untuk server pengujian yang menjalankan banyak uji coba dan di mana uji coba tersebut terbukti tidak stabil atau menyebabkan perangkat lunak yang di bawah pengujian berperilaku tidak menentu (misalnya dengan menggunakan terlalu banyak memori)

Dalam tutorial ini Anda akan belajar:

  • Cara mengelola proses dengan cara otomatis
  • Sumber daya mana yang mungkin ingin Anda pantau, dan mengapa
  • Contoh kode yang menunjukkan bagaimana penghentian proses otomatis dapat bekerja untuk masalah hogging memori
Manajemen daftar proses dan penghentian proses otomatis

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux-independen
Perangkat lunak Baris perintah bash, sistem berbasis Linux
Lainnya Utilitas apa pun yang tidak termasuk dalam shell bash secara default dapat diinstal menggunakan sudo apt-get install-name utilitas (atau instalasi yum untuk sistem berbasis redhat)
Konvensi # - mengharuskan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mengharuskan Linux-Commands untuk dieksekusi sebagai pengguna biasa

Terlalu banyak memori! Atau lebih baik, terlalu sedikit ingatan!

Ada dua sumber daya utama yang mungkin selalu ingin Anda awasi, tergantung pada perangkat lunak yang digunakan di tempat lain di server, dan itu adalah penggunaan memori dan ruang disk. Penggunaan CPU juga dapat masuk ke dalam gambar, tetapi agak berbeda dari yang lain. Alasannya adalah - ketika Anda kehabisan ruang disk, atau keluar dari ruang memori, server Anda akan mulai bermain.

Anda mungkin mendapatkan perilaku yang tidak terdefinisi karena kehabisan ruang disk, dan jika Anda kehabisan memori, oom pembunuh (keluar dari memori mesin bunuh proses otomatis) dapat menendang dan membunuh beberapa proses, dan sebagainya.

Di sisi lain, dengan CPU, bahkan jika perangkat lunak yang berjalan di tempat lain di server memaksimalkan CPU, server Anda akan terus berjalan. Jika ini adalah program hogging CPU yang nyata, itu mungkin sangat lambat, tetapi dalam kebanyakan kasus Anda masih dapat setidaknya mengetik beberapa perintah.

Artikel ini akan fokus pada manajemen proses pengkhianatan memori: penghentian proses otomatis yang mengonsumsi terlalu banyak memori. Pertama -tama mari kita lihat bagaimana kita dapat memantau penggunaan proses memori:

$ ps -eo pid, pmem --sort -rss | head -n10 pid %mem 406677 19.5 373013 2.1 406515 2.0 406421 1.9 2254 1.8 406654 1.8 406554 1.7 406643 0.9 16622 0.7 


Di sini kami meminta ps untuk menghasilkan daftar 10 PID teratas. Kami mengindikasikan bahwa kami ingin melihat semua proses (-e), dan untuk setiap proses kami ingin melihat ID proses (-o pid), dan persentase memori yang dikonsumsi (-o PMEM), atau total (dengan opsi digabungkan: -EO PID, PMEM).

Selanjutnya kami meminta daftar untuk ditetapkan untuk kami (--menyortir) dan atur opsi RSS (-RSS) sebagai spesifikasi format panjang. Kami kemudian menangkap 10 hasil teratas dengan menggunakan head -N10. Jika kami ingin melihat proses apa yang menggunakan memori, kami juga dapat menambahkan ,Comm ke PID, PMEM daftar, atau kami cukup gunakan ps -ef | grep pid di mana pid adalah nomor yang tercantum di kolom pertama dari ps output untuk melihat detail lengkap untuk suatu proses.

Sekarang mari kita mengotomatiskan ini sedemikian rupa sehingga proses yang menggunakan lebih dari 10% memori secara otomatis diakhiri.

Peringatan: Jangan jalankan ini di komputer mana pun tanpa sepenuhnya memahami apa yang akan dilakukannya, dan bagaimana ini bekerja. Informasi di sini diberikan apa adanya, tanpa jaminan apa pun. Anda dapat mengakhiri beberapa proses yang tidak Anda inginkan, atau tidak boleh, diakhiri.

# ps -eo pmem, pid --sort -rss | grep '^[\ t]*[1-9] [0-9] \.'| awk 'cetak $ 2' | xargs -i  kill -9  

Pertama, kami akan menjalankan ini sebagai root, untuk memastikan kami memiliki hak istimewa yang cukup untuk membunuh proses yang relevan. Perhatikan bahwa kami menukar PMEM (persen memori) dan pid (Proses ID) di sekitar. Ini membuatnya sedikit lebih mudah untuk menggunakan ekspresi reguler grep. Ekspresi reguler GREP kami berfungsi seperti ini: Pertama, cari ruang () atau ([…]) tab (\T), nol atau lebih (*) waktu.

Selanjutnya, cari nomornya 1 ke 9, setidaknya sekali (setidaknya sekali adalah frekuensi default, jadi tidak ada simbol yang mirip * digunakan!). Ini untuk menangkap nomor apapun 10 (dimulai dengan 1) ke 99 (dimulai dengan 9). Selanjutnya kita mencari yang lain 0 ke 9, Jadi secara total kami mencari/gepping untuk angkanya 10 ke 99. Kami mengikuti ini dengan titik literal (\., Mengerjakan bukan menggunakan . di sini sebagai satu titik tanpa aren backslash berarti karakter apa pun daripada titik literal!) untuk memastikan kami hanya menangkap sebelum titik desimal.

Kami kemudian hanya mengambil output kolom kedua (Cetak $ 2, dengan $ 2 menjadi kolom kedua, $ 1 yang pertama dll.) dengan menggunakan AWK. Akhirnya, kami meneruskan ini xargs dan tuliskan Bunuh -9 dalam format yang bersih dan mudah dimengerti. Kami bisa menulis ini menggunakan sintaks steno, tapi ini bagus, bersih dan jernih. Itu -SAYA menunjukkan apa yang akan kita gunakan sebagai ganti-string kami (mengganti terjadinya hal yang sama dalam perintah dengan input apa pun xargs telah menerima dari pipa), dalam hal ini . Saya juga merekomendasikan Secara umum sebagai string pertukaran/ganti yang aman.

Jika Anda ingin mempelajari lebih lanjut tentang xargs, Silakan lihat xargs kami untuk pemula dengan contoh dan multi -berulir xargs dengan contoh artikel.

Hasil menjalankan perintah adalah bahwa setiap proses yang menggunakan lebih dari 10% memori akan segera diakhiri dengan yang kuat Bunuh -9 memerintah. Jika Anda ingin mengotomatiskan hal yang sama, Anda bisa meletakkannya di dalam a sementara benar; lakukan… selesai loop, cukup ganti .. Dengan perintah di atas, atau Anda dapat menambahkan ini ke crontab Anda, atau skrip pemantauan yang sudah ada sebelumnya.



Hati -hati dengan menggunakan perintah ini, bukan tanpa risiko. Berusaha untuk memahami apa yang Anda lakukan setiap saat! Anda mungkin juga ingin memperkenalkan 1 menit tidur untuk menghindari memalu server dengan perintah:

# sementara benar; do ps -eo pmem, pid --sort -rss | grep '^[\ t]*[1-9] [0-9] \.'| awk 'cetak $ 2' | xargs -i  kill -9 ; tidur 60; Selesai 

Dengan cara ini kami memantau semua proses dalam memori secara teratur dan/atau berkelanjutan dan mengakhiri proses apa pun yang mulai nakal, digunakan untuk banyak memori dll.

Kesimpulan

Di artikel ini, kami melihat proses pengelolaan dengan cara otomatis dengan menggunakan format yang diformat khusus ps output, serta xargs Dan membunuh perintah. Kami juga mengeksplorasi sumber daya apa yang akan dipantau, dan mengapa. Akhirnya kami menunjukkan bagaimana penghentian proses otomatis dapat bekerja untuk masalah hogging memori dalam kode. Menikmati!

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Menguasai loop skrip bash
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Game Terminal Terbaik di Linux
  • Membandingkan Linux Apache Prefork vs Pekerja MPM
  • Panduan Pemecahan Masalah Umum GNU/Linux untuk Pemula
  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…
  • Manajemen proses latar belakang bash
  • Cara menyebarkan sinyal untuk proses anak dari pesta ..