Memperbaiki ulimit: buka file: tidak dapat mengubah batas: Operasi tidak diizinkan

13

Saya menguji ini pada instalasi GNU / Linux yang berbeda:

perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'

Sistem A dan D

Batas pertama yang saya tekan adalah 1024. Batas ini mudah dinaikkan dengan memasukkannya ke /etc/security/limits.conf:

*                hard    nofile          1048576

lalu jalankan:

ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max

Sekarang tes menuju ke 1048576.

Namun, sepertinya saya tidak bisa menaikkannya di atas 1048576. Jika saya meletakkan 1048577 di membatasi.conf itu hanya diabaikan.

Apa yang menyebabkan itu?

Sistem B

Pada sistem BI bahkan tidak bisa mencapai 1048576:

echo 99999999 | sudo tee /proc/sys/fs/file-max

/etc/security/limits.conf:

*                hard    nofile          1048576

Di sini saya dapatkan:

$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK

Dari mana batas itu berasal?

Sistem C

Sistem ini juga memiliki batas 1048576 di Limit.conf dan 99999999 di / proc / sys / fs / file-max.

Tapi di sini batasnya adalah 4096:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 4096
# OK

Bagaimana cara menaikkan itu ke (setidaknya) 1048576?

(Catatan untuk diri sendiri: Jangan lakukan echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max:)

Ole Tange
sumber
1
Saya memiliki masalah yang persis sama, batasnya tampaknya 1048576. Jika saya membahasnya, saya mendapatkan kesalahan berikut: bash: ulimit: buka file: tidak dapat mengubah batas: Operasi tidak diizinkan
Abbadon
Hai, saya mengalami masalah yang sangat mirip. Saya pikir akan sangat membantu untuk memberikan rincian lebih lanjut tentang apa sistem yang berbeda ini.
Time4Tea

Jawaban:

4

Periksa yang /etc/ssh/sshd_configmengandung:

UsePAM=yes

dan itu /etc/pam.d/sshdmengandung:

session    required   pam_limits.so

Masih tidak ada jawaban mengapa 1048576 maks.

1048576 tampaknya per proses. Jadi dengan memiliki banyak proses, batas ini dapat diatasi.

Ole Tange
sumber
4
Jika ini benar-benar solusi untuk masalah Anda sendiri, saya pikir akan lebih baik untuk menarik lebih banyak hubungan antara masalah dan solusi di atas.
Jeff Schaller
2
Re: 1048576 (= 2 ^ 10 * 2 ^ 10 = 1024 ^ 2, untuk referensi). Mungkin ada beberapa informasi yang relevan dalam jawaban ini di sini: stackoverflow.com/a/1213069/2320823
saladi
1
Apa hubungannya dengan itu?
Linas
Saya setuju dengan @Linas. Maaf, saya pikir tautan antara jawaban dan pertanyaannya tidak jelas.
Time4Tea