Apakah mungkin untuk mengubah batas lunak dan keras dari proses tertentu ?
Dalam kasus saya, proses saya adalah mongod
dan banyak sumber daya web memberitahu saya untuk hanya menjalankan:
ulimit -n <my new value>
Pikiran saya saat ini:
- Bagaimana perintah mengetahui batas proses yang akan saya modifikasi? Tidakkah ini akan mengubah batas seluruh sistem file terbuka?
- Saya menduga bahwa perintah ini hanya mengubah batas lunak. Jadi apakah ada cara untuk meningkatkan batas keras juga?
Jawaban:
Suatu proses dapat mengubah batasnya melalui
setrlimit(2)
panggilan sistem. Ketika Anda menjalankanulimit -n
Anda harus melihat nomor. Itulah batas saat ini pada jumlah deskriptor file terbuka (yang termasuk file, soket, pipa, dll) untuk proses. Theulimit
perintah mengeksekusigetrlimit(2)
system call untuk mencari tahu apa nilai saat ini.Inilah intinya: sebuah proses mewarisi batas saat ini dari proses induknya Jadi, jika Anda menjalankan,
ulimit -n 64
Anda akan menetapkan batas shell dari deskriptor file terbuka menjadi 64. Setiap proses yang dimulai shell akan memiliki batas yang sama, kecuali jika proses baru memanggil dengansetrlimit()
tepat.Untuk mengubah
mongodb's
batas deskriptor file terbuka, Anda akan menjalankanulimit -n 2048
(atau apa pun jumlah besar kernel Anda memungkinkan) dalam sebuah shell. Anda kemudian akan menggunakan shell itu untuk memulaimongodb
. Sebagai proses anak,mongodb
akan mewarisi batas (besar) pada deskriptor file terbuka.Untuk memodifikasi batas file terbuka sistem, yang sepertinya lebih seperti jumlah dari semua proses batas deskriptor file terbuka, Anda harus melakukan sesuatu seperti memodifikasi
/etc/sysctl.conf
dan menjalankansysctl -p
. Lihatlah nilaifs.file-max
parameter di/etc/sysctl.conf
.sumber
Untuk mengubah batas proses yang sedang berjalan, Anda dapat menggunakan perintah utilitas
prlimit
.Apa yang dilakukan secara internal adalah menelepon
setrlimit(2)
. Halaman manual prlimit harus berisi beberapa contoh doa yang berguna.Sumber: https://sig-io.nl/posts/run-time-editing-of-limits-in-linux/
sumber
too many files open
kesalahan. Jawaban Anda menyelesaikan masalah saya tanpa menghentikan proses.Setidaknya di Linux, sebagian besar distro tampaknya menggunakan pam untuk otentikasi. Satu modul yang dilengkapi dengan pam adalah modul limit . Mengutip dari README untuk pam_limits:
The pam_limits PAM module sets limits on the system resources that can be obtained in a user-session. Users of uid=0 are affected by this limits, too.
Sebagai hasilnya, Anda dapat menetapkan batas per pengguna, per grup, dan standar, dalam kedua kategori tersebut keras (root menyetel ini dan proses tidak dapat meminta lebih tinggi) dan batas lunak. Batas lunak biasanya ditetapkan lebih rendah dari batas keras, dan aplikasi dapat meningkatkannya hingga mencapai batas keras.
Dalam kasus Anda, jika proses yang Anda inginkan untuk meningkatkan batas berjalan sebagai pengguna biasa, Anda dapat meningkatkan batas untuk pengguna atau grup itu. Sebagai contoh, saya memiliki beberapa tugas cs mysql di beberapa server yang memerlukan pegangan file ekstra untuk dibuka, jadi saya mengatur ini:
Tidak ada yang perlu direstart; ketika Anda su ke pengguna itu, Anda dapat segera melihat bahwa batas baru berlaku.
Hal lain yang dapat Anda lakukan jika Anda menggunakan sistem turunan RedHat adalah memasukkan panggilan ulimit yang Anda inginkan ke dalam skrip / etc / sysconfig / $ SERVICE. Sebagai contoh, skrip init apache bernama /etc/init.d/httpd, dan sumber file konfigurasi / etc / sysconfig / httpd jika ditemukan. Saya merasa lebih mudah untuk mengelola dengan melakukan ini daripada mengedit skrip init itu sendiri karena skrip init dapat diperbarui ketika rpm ditingkatkan, tetapi file sysconfig hanya diperbarui jika mereka tidak diubah dari default.
sumber
Perintah akan mengubah batas untuk proses saat ini (shell Anda) dan proses anak apa saja (apa pun yang Anda jalankan dari shell selanjutnya).
Proses diatur dalam pohon. Setiap proses memiliki orang tua (yang memintanya). Proses nomor 1, init, adalah proses khusus karena merupakan induknya sendiri. Alat seperti htop atau atas dapat menunjukkan kepada Anda proses yang ditampilkan sebagai pohon orang tua dan anak-anak.
sumber