Pengurusan senarai proses dan penamatan proses automatik

Pengurusan senarai proses dan penamatan proses automatik

Memandangkan penggunaan/pemaksimaan optimum terus berkembang, ia menjadi lebih penting untuk menguruskan proses dengan baik. Salah satu aspek ini adalah penamatan proses automatik. Apabila proses telah menjadi penyangak, dan memakan terlalu banyak sumber, ia boleh ditamatkan secara automatik.

Ini amat sesuai untuk pelayan yang mempunyai banyak proses sementara atau guna. Ia juga sesuai untuk pelayan ujian yang menjalankan banyak ujian ujian dan di mana ujian ujian itu terbukti tidak stabil atau menyebabkan perisian di bawah ujian untuk berkelakuan tidak menentu (contohnya dengan menggunakan memori terlalu banyak)

Dalam tutorial ini anda akan belajar:

  • Cara menguruskan proses dengan cara automatik
  • Sumber mana yang mungkin anda mahu memantau, dan mengapa
  • Contoh kod yang menunjukkan bagaimana penamatan proses automatik dapat berfungsi untuk masalah pemendakan memori
Pengurusan senarai proses dan penamatan proses automatik

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran linux-bebas
Perisian Baris perintah bash, sistem berasaskan linux
Yang lain Sebarang utiliti yang tidak termasuk dalam shell bash secara lalai boleh dipasang menggunakan sudo apt-get memasang nama utiliti (atau pemasangan yum untuk sistem berasaskan redhat)
Konvensyen # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa

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

Terdapat dua sumber utama yang mungkin anda inginkan, bergantung kepada perisian yang digunakan di tempat lain di pelayan, dan itu adalah penggunaan memori dan ruang cakera. Penggunaan CPU juga boleh masuk ke dalam gambar, tetapi ia agak berbeza dari yang lain. Sebabnya ialah - apabila anda kehabisan ruang cakera, atau keluar dari ruang ingatan, pelayan anda akan mula bermain.

Anda mungkin mendapat tingkah laku yang tidak jelas kerana kehabisan ruang cakera, dan jika anda kehabisan ingatan, pembunuh OOM (keluar dari enjin proses automatik memori) boleh menendang dan membunuh beberapa proses, dan sebagainya.

Sebaliknya, dengan CPU, walaupun perisian yang berjalan di tempat lain di pelayan memaksimumkan CPU, pelayan anda akan terus berjalan. Sekiranya ia adalah program pemendakan CPU yang sebenar, ia mungkin sangat perlahan, tetapi dalam kebanyakan kes anda masih dapat menaip sekurang -kurangnya beberapa arahan.

Artikel ini akan memberi tumpuan kepada pengurusan proses pemangku memori: penamatan proses automatik yang memakan memori terlalu banyak. Mari kita lihat bagaimana kita dapat memantau penggunaan proses memori:

$ ps -eo pid, pmem - -sort -rss | kepala -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 senarai 10 pid teratas. Kami menyatakan bahawa kami mahu melihat semua proses (-e), dan untuk setiap proses kita mahu melihat id proses (-o pid), dan peratusan ingatan yang digunakannya (-o PMEM), atau secara keseluruhan (dengan pilihan digabungkan: -EO PID, PMEM).

Seterusnya kami meminta senarai itu untuk dianggap sebagai kami (--menyusun) dan tetapkan pilihan RSS (-RSS) sebagai spesifikasi format yang panjang. Kami kemudian menangkap keputusan 10 teratas dengan menggunakan kepala -n10. Sekiranya kita mahu melihat proses apa yang menggunakan memori, kita juga boleh menambah ,kom kepada PID, PMEM menyenaraikan, atau kami hanya menggunakan ps -ef | Grep Pid di mana PID adalah nombor seperti yang disenaraikan dalam lajur pertama ps output untuk melihat butiran lengkap untuk proses.

Sekarang mari kita mengotomatisasi ini sedemikian rupa sehingga proses yang menggunakan lebih dari 10% memori secara automatik ditamatkan.

Amaran: Jangan jalankan ini di mana -mana komputer tanpa memahami sepenuhnya apa yang akan dilakukannya, dan bagaimana ini berfungsi. Maklumat di sini disediakan sebagai, tanpa jaminan apa-apa jenis. Anda boleh menamatkan beberapa proses yang anda tidak mahu, atau tidak boleh ditamatkan.

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

Pertama, kita akan melaksanakan ini sebagai akar, untuk memastikan kita mempunyai keistimewaan yang cukup untuk membunuh proses yang relevan. Perhatikan bahawa kita menukar PMEM (memori peratus) dan pid (ID proses) di sekitar. Ini menjadikannya lebih mudah untuk menggunakan ungkapan biasa grep. Ekspresi biasa GREP kami berfungsi seperti ini: Pertama, cari ruang () atau ([...]) tab (\ t), sifar atau lebih (*) kali.

Seterusnya, cari nombornya 1 ke 9, sekurang-kurangnya sekali (sekurang-kurangnya sekali adalah kekerapan lalai, jadi tiada simbol yang serupa dengan * digunakan!). Ini untuk menangkap nombor dari 10 (bermula dengan 1) hingga 99 (bermula dengan 9). Seterusnya kita mencari yang lain 0 ke 9, Oleh itu, secara keseluruhan kita mencari/menyusu nombor 10 ke 99. Kami mengikuti ini dengan titik literal (\., lakukan tidak gunakan . di sini sebagai satu titik tanpa awalan backslash mana -mana watak bukannya titik literal!) untuk memastikan kita menangkap sebelum titik perpuluhan sahaja.

Kami kemudian hanya mengambil output lajur kedua (cetak $ 2, dengan $ 2 Menjadi lajur kedua, $ 1 yang pertama dll.) dengan menggunakan awk. Akhirnya, kita lulus ini Xargs dan menulis Bunuh -9 dalam format yang bersih dan mudah difahami. Kita boleh menulis ini menggunakan sintaks shorthand, tetapi ini bagus, bersih dan jelas. The -I Menunjukkan apa yang akan kami gunakan sebagai penggantian kami (menggantikan kejadian yang sama dalam perintah dengan input apa pun Xargs telah menerima dari paip), dalam kes ini . Saya juga mengesyorkan Secara umum sebagai swap/ganti rentetan selamat.

Sekiranya anda ingin mengetahui lebih lanjut mengenai Xargs, Sila lihat Xargs kami untuk pemula dengan contoh dan berbilang berulir Xargs dengan artikel contoh.

Hasil menjalankan perintah adalah bahawa apa -apa proses yang menggunakan lebih dari 10% memori akan segera ditamatkan dengan kuat Bunuh -9 perintah. Sekiranya anda ingin mengautomasikan perkara yang sama, anda boleh memasukkannya ke dalam Walaupun benar; lakukan ... selesai gelung, hanya menggantikan dengan arahan di atas, atau anda boleh menambahkan ini ke Crontab anda, atau skrip pemantauan yang sedia ada yang sedia ada.



Berhati -hati dengan menggunakan arahan ini, ia bukan tanpa risiko. Berusaha untuk memahami apa yang anda lakukan sepanjang masa! Anda juga mungkin ingin memperkenalkan 1 minit tidur Untuk mengelakkan Hammering Server dengan arahan:

# sementara benar; Adakah PS -EO PMEM, PID -Sort -RSS | grep '^[\ t]*[1-9] [0-9] \.'| awk 'print $ 2' | Xargs -i  Kill -9 ; tidur 60; selesai 

Dengan cara ini, kami memantau semua proses dalam ingatan secara tetap dan/atau berterusan dan menamatkan sebarang proses yang mula menjadi penyangak, menggunakan memori banyak dll.

Kesimpulan

Dalam artikel ini, kita melihat proses pengurusan secara automatik dengan menggunakan format tersuai ps output, serta Xargs dan bunuh Perintah. Kami juga meneroka sumber yang hendak dipantau, dan mengapa. Akhirnya kami menunjukkan bagaimana penamatan proses automatik dapat berfungsi untuk masalah pemendakan memori dalam kod. Nikmati!

Tutorial Linux Berkaitan:

  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Menguasai Gelung Skrip Bash
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Permainan Terminal Terbaik di Linux
  • Membandingkan Linux Apache Prefork vs Pekerja MPMS
  • Panduan Penyelesaian Masalah Umum GNU/Linux untuk Pemula
  • Sistem Hung Linux? Cara melarikan diri ke baris arahan dan ..
  • Pengurusan proses latar belakang bash
  • Cara menyebarkan isyarat kepada proses kanak -kanak dari bash ..