Menjalankan beberapa server Linux dengan daemon layanan sistem tunggal atau hanya beberapa yang vital, saya ingin menyesuaikan pembunuh OOM untuk proses-proses yang di-daemonisasi jika-kalau terjadi sesuatu yang aneh. Sebagai contoh, saat ini beberapa Ubuntu server menjalankan MySQL mendapat MySQL daemon dibunuh karena ton apt-checker
proses yang memakan semua memori dan kernel pikir itu ide yang baik untuk membunuh MySQL.
Saya tahu saya dapat menyesuaikan skor menggunakan /proc/$(pidof mysqld)/oom_score_adj
file untuk memberikan kernel beberapa petunjuk saya tidak suka MySQL untuk dibunuh, namun itu tidak selamat me-restart layanan. Haruskah saya mengedit skrip init / pemula dari paket untuk menyertakan penyesuaian ini? Saya tidak berpikir itu solusi yang sangat elegan karena saya akan membuat penyesuaian ke file milik paket. Apakah mungkin untuk menghubungkan ke skrip pemula / init secara umum dan menyesuaikannya secara kondisional? Atau apakah Anda menyarankan menjalankan skrip tak terbatas seperti while true{ adjust_oom(); sleep 60;}
?
sumber
Jawaban:
Beberapa sistem pengawasan demon modern memiliki cara untuk melakukan ini. (Memang, karena ada alat rantai pemuatan untuk pekerjaan itu, bisa dibilang mereka semua memiliki sarana untuk melakukan ini.)
oom score
dalam file pekerjaan.OOMScoreAdjust=
pengaturan di unit layanan. Anda dapat menggunakan file tambalan unit layanan untuk mempengaruhi unit layanan pra-paket.oom-kill-protect
alat dari nosh toolset dalamrun
program untuk layanan.Jika Anda mengonversi unit layanan sistem,
Sebagai bonus, Anda dapat membuatnya menjadi parameter: dan mengatur nilai parameter di lingkungan layanan (dianggap dibaca dari envdir yang terkait dengan layanan, di sini dimanipulasi denganconvert-systemd-units
alat ini sebenarnya akan mengubahOOMScoreAdjust=
pengaturan menjadi doa sepertioom-kill-protect
.rcctl
shim nosh toolset ):Bacaan lebih lanjut
oom-kill-protect
. nosh toolset. Perangkat lunak.oom score
". Mulai Cookbook .OOMScoreAdjust
".systemd.exec
. halaman manual systemd. freedesktop.org.rcctl
. nosh toolset. Perangkat lunak.sumber
Ini dimungkinkan di Ubuntu menggunakan Startstart dan
oom score
opsi konfigurasi.sumber
Anda dapat meretasnya ke dalam MySQL itu sendiri (mis. OpenSSH
sshd
melakukan ini), namun itu agak terlalu hardcore dan sangat kotor (masalah dengan pembaruan dll.)Anda dapat melakukan ini dalam pembungkus atau dalam skrip init - skor harus diwarisi (dan dalam pembungkus Anda mungkin ingin
exec mysqld "$@"
tetap melakukannya ).Gunakan
cgroups
- itu akan memberi Anda sedikit lebih banyak fleksibilitas dan itu dapat dibuat permanen dalam arti, bahwa pengaturan yang sesuai dapat diterapkan secara otomatis pada restart layanan. Lihat misalnya mengendalikan prioritas aplikasi menggunakan cgroup untuk info lebih lanjut. Untuk mencapai otomatisme yang Anda cari, Anda mungkin ingin melihat libcgroup , yang berisi daemon yang dapat menangani perubahan cgroup dari proses yang berjalan dengan cepat sesuai dengan seperangkat aturan, atau cukup gunakancgexec
pembungkus ( dari paket yang sama).sumber