Tidak dapat Meningkatkan batas file terbuka melewati 4096 (Ubuntu)


34

Saya di Ubuntu 17.04. Mencoba meningkatkan batas file terbuka, dan tidak ada instruksi yang saya temukan online berfungsi. Saya bisa naik ke 4096, tetapi tidak bisa melewati itu.

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

Itu bekerja. Ini tidak:

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

Tampaknya karena batas keras:

$ ulimit -Hn
4096

Saya sudah mencoba menambahkan baris ini ke /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

Juga menambahkan baris ini ke /etc/pam.d/common-session dan /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

Sejak melakukan itu, saya telah mem-boot ulang komputer saya. Perubahan untuk membatasi.conf tampaknya tidak mempengaruhi apa pun. Batas keras masih tertahan di 4096, mencegah saya naik lebih tinggi. Bagaimana cara meningkatkan batas file terbuka saya?


Berikut beberapa info konfigurasi tambahan:

$ cat /proc/sys/fs/file-max 
1624668

Jawaban:


56

OK, saya akhirnya menemukan ini. Batas yang saya atur di /etc/security/limits.conf sedang diterapkan, tetapi batas tersebut tidak diterapkan pada login grafis. Ini dapat diverifikasi seperti ini dari jendela terminal:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Lebih banyak penelitian membawa saya ke laporan bug ini , yang membuat saya menunjuk ke arah yang benar. Untuk mengubah batas yang digunakan oleh shell login, kita perlu menambahkan baris berikut ke /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Perubahan itu berfungsi, tetapi hanya memengaruhi batas lunak. (Membiarkan kami dibatasi dengan batas keras masih 4096.) Untuk mempengaruhi batas keras juga, kita harus memodifikasi /etc/systemd/system.conf dengan perubahan yang sama.

Perubahan yang saya buat di /etc/pam.d tidak diperlukan. Setidaknya di Ubuntu, ini sudah berfungsi. Selain itu, tidak perlu mengubah pengaturan untuk rootdan *di membatasi.conf. Mengubah batas mkasbergsudah cukup, setidaknya untuk kasus penggunaan saya.


Singkatnya

Jika Anda ingin meningkatkan batas yang ditunjukkan oleh ulimit -n, Anda harus:

  • Ubah /etc/systemd/user.conf dan /etc/systemd/system.conf dengan baris berikut (ini menangani login grafis):

    DefaultLimitNOFILE=65535
    
  • Ubah /etc/security/limits.conf dengan baris berikut (ini menangani login non-GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Mulai ulang komputer Anda agar perubahan diterapkan.


2
DefaultLimitNOFILE=65535melakukan trik. Tapi mengapa itu tidak /etc/security/limits.conf berhasil?
Suvitruf berkata Reinstate Monica

6
Login GUI menggunakan systemd, yang ternyata memiliki konfigurasi sendiri ( /etc/systemd/system.conf) yang tidak tergantung pada konfigurasi normal untuk sesi terminal ( /etc/security/limits.conf). Saya tidak cukup tahu tentang systemd untuk tahu mengapa itu diterapkan dengan cara ini.
mkasberg

1
@Suvitruf karena diabaikan dalam sistem systemd . Saya memposting jawaban.
Marc.2377

1
Hanya ingin menunjukkan bahwa batasan untuk rootpengguna tidak dapat ditentukan oleh *atau grup penentu. rootliteral harus ditentukan secara eksplisit.
Petr Javorik

2
Ini berfungsi untuk saya, setelah reboot .
Shihe Zhang

14

Tidak perlu mengubah apa pun di /etc/security/limits.conffile, itu diabaikan jika Anda menggunakan systemd.

(mereproduksi jawaban yang dimodifikasi untuk pertanyaan lain di jaringan ...)

Alternatif bagi mereka yang memilih untuk tidak mengedit default /etc/systemd/system.confdan /etc/systemd/user/conffile:

  1. buat file baru /etc/systemd/system.conf.d/limits.confdengan konten ini:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. jalankan systemctl daemon-reexecsebagai root

  3. logout dan login lagi

  4. periksa batas baru Anda dengan ulimit -n.

Lihat halaman systemd-system.confmanual untuk detailnya.


Pada sistem Ubuntu 18.10 saya, file yang dimaksud adalah at /etc/systemd/system.conf. Membuat perubahan di sana tampaknya telah berhasil, terima kasih.
Stephen Kennedy

1
Hanya logout untuk saya tidak berhasil (Ubuntu 18.04) tetapi memulai kembali melakukan pekerjaan. Solusi yang sangat elegan, terima kasih.
stann1

0

Menggunakan Ubuntu 17.04 saya mendapat batas keras yang dijelaskan:

user@paresh.com:~$ ulimit -Hn
4096

Saya bisa menurunkannya menggunakan ulimit, tetapi tidak menambahnya, seperti pertanyaan yang menggambarkannya. ulimitmanual menjelaskan:

hanya root yang dapat meningkatkan batas hard.

Jadi saya mencoba menetapkan batas yang lebih tinggi /etc/security/limits.confseperti ini:

user hard nofile 9999

dan info masuk baru seperti ssh localhost -l usermemberi saya batas baru:

user@paresh.com:~$ ulimit -Hn
9999

Saya harap ini juga bekerja untuk Anda.


0
  1. edit /etc/systemd/system/sonar.service

  2. tambahkan dua baris ini di bawah Layanan

[Layanan]

LimitMEMLOCK = tak terbatas

LimitNOFILE = 65535

  1. systemctl daemon-reload
  2. systemctl restart sonar

ini bekerja untuk saya.


0

TL; DR Saya merasa perlu memusatkan jawaban, sehingga lebih mudah ditemukan. Butuh waktu lama bagi saya untuk mengumpulkan semua bagian agar berfungsi dengan benar ...

Ada 2 lokasi yang harus dipertimbangkan.

  1. Sesi GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    atau lebih baik di sini:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. lingkungan shell

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    atau lebih baik di sini:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Setelah mengubah pengaturan pada file di atas, reboot dan kemudian periksa batasannya dengan: ulimit -n -Hn -Sn

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.