Tetapkan batas file maks pada proses yang sedang berjalan

27

Saya memiliki proses yang berjalan lama yang pada akhirnya akan mencapai batas maksimum file terbuka. Saya tahu cara mengubahnya setelah gagal, tetapi apakah ada cara untuk mengubahnya untuk proses yang berjalan, dari baris perintah?

kgii
sumber

Jawaban:

28

Pada kernel yang lebih baru (2.6.32+) di CentOS / RHEL Anda dapat mengubahnya saat runtime dengan / proc / <pid> / limit:

cd /proc/7671/
[root@host 7671]# cat limits  | grep nice
Max nice priority         0                    0                    
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits  | grep nice
Max nice priority         5                    6                    
Sig-IO
sumber
Itu aturan! Tidak tahu Anda bisa menulis ke file limit.
clee
4
tidak berfungsi untuk saya di ubuntu 12.04
Poma
5
Ini tidak berfungsi pada kernel 3.2 saya . Saya kira distribusi Anda memiliki tambalan tidak resmi spesifik untuk ini karena saya tidak melihat jejak tambalan ini di fs / proc / base.c kernel .
Totor
Bisa jadi ... Saya tahu itu ada di kernel RHEL / CentOS. Tampaknya tidak hadir di kernel Debian.
Sig-IO
2
'setprlimit' adalah cara masa depan yang terbukti dan direkomendasikan, lihat jawaban berikutnya
Sig-IO
26

Seperti yang didokumentasikan di sini , prlimitperintah, yang diperkenalkan dengan util-linux 2.21 memungkinkan Anda membaca dan mengubah batas proses yang berjalan.

Ini adalah tindak lanjut dari writable /proc/<pid>/limits, yang tidak terintegrasi dalam kernel arus utama. Solusi ini seharusnya berhasil.

Jika prlimit(1)belum, Anda dapat menemukan kode ke versi minimalis di halaman prlimit(2)manual .

Sig-IO
sumber
2
+1 untuk versi minimalis di halaman manual!
Totor
Peringatan: "memcached" akan segfault jika Anda mengubah "nolimit" pada prosesnya setelah menemui batas. Tidak selalu ide yang baik untuk menggunakan batas yang dapat ditulisi
John
2

Anda dapat mencoba ulimit man ulimitdengan opsi -n namun halaman mag tidak sebagian besar OS tidak memungkinkan ini diatur.

Anda dapat menetapkan batas deskripsi file sistem dengan menggunakan sysctl -w fs.file-max=Ndan membuat perubahan tetap ada boot posting masuk/etc/sysctl.conf

Namun saya juga menyarankan melihat proses untuk melihat apakah itu benar-benar perlu memiliki begitu banyak file terbuka pada waktu tertentu, dan jika Anda sebenarnya bisa menutup beberapa file dan lebih efisien dalam proses.

Oneiroi
sumber
Masalah file terbuka adalah bug, tapi saya belum bisa mengetahuinya. Sementara saya ingin melakukannya, produksi secara berkala mogok di tengah hari.
kāgii
ulimittidak menerapkan pengaturan untuk menjalankan proses .
coba-tangkap-akhirnya
0

Proses ini dapat mengubah batas lunaknya sendiri jika diprogram untuk melakukannya (atau jika Anda berhasil meretasnya), tetapi tidak dapat menaikkan batasnya kecuali jika ia memiliki kemampuan CAP_SYS_RESOURCE. Anda dapat memeriksa batas saat runtime di /proc/$pid/limits.

Tobu
sumber