4096'dan (Ubuntu) geçen açık dosya sınırı artırılamıyor


34

17.04 Ubuntu'dayım. Açık dosya sınırını artırmaya çalışıyor ve çevrimiçi bulduğum talimatlardan hiçbiri çalışmıyor. 4096'ya kadar gidebilirim ama bunu geçemiyorum.

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

Bu çalışır. Bu değil:

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

Zor sınır nedeniyle olduğu anlaşılıyor:

$ ulimit -Hn
4096

Bu satırları /etc/security/limits.conf dosyasına eklemeyi denedim:

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

Ayrıca bu satırı /etc/pam.d/common-session ve /etc/pam.d/common-session-noninteractive dizinine ekleyin:

session required pam_limits.so

Bunu yaptığımdan beri bilgisayarımı yeniden başlattım. Limit.conf dosyasındaki değişiklikler hiçbir şeyi etkilemiyor gibi görünüyor. Sabit sınır hala 4096'da kaldı ve daha fazla yükselmemi engelledi. Açık dosya limitimi nasıl yükseltirim?


İşte bazı ek yapılandırma bilgisi:

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

Yanıtlar:


56

Tamam, sonunda anladım. /Etc/security/limits.conf 'de koyduğum sınırlar uygulanıyordu, ancak grafiksel oturum açmaya uygulanmadılar. Bir terminal penceresinden bunun gibi doğrulanabilir:

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

Daha fazla araştırma beni doğru yöne işaret eden bu hata raporuna yönlendirdi. Giriş kabuğu tarafından kullanılan sınırı değiştirmek için, /etc/systemd/user.conf dosyasına şu satırı eklememiz gerekir:

DefaultLimitNOFILE=65535

Bu değişiklik işe yarıyor, ancak yalnızca yumuşak sınırı etkiliyor. (Bizi hala sabit bir sınır olan 4096 ile sınırlandırarak bırakıyoruz.) Sabit limiti de etkilemek için aynı değişiklikle /etc/systemd/system.conf dosyasını değiştirmeliyiz.

/Etc/pam.d dosyasında yaptığım değişiklikler gerekli değildi. En azından Ubuntu'da bu zaten çalışıyor. Ayrıca, limit.conf için rootve *içinde ayarları değiştirmek gerekli değildi . mkasbergEn azından benim kullanım durumum için limitleri değiştirmek yeterliydi.


Özetle

Eğer gösterilen sınırı artırmak istiyorsanız ulimit -n, şunları yapmalısınız:

  • /Etc/systemd/user.conf ve /etc/systemd/system.conf komutunu aşağıdaki satırla değiştirin (bu grafiksel oturum açmayı önemser):

    DefaultLimitNOFILE=65535
    
  • /Etc/security/limits.conf dosyasını şu satırlarla değiştirin (bu GUI dışı oturum açma işlemlerini önler):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Değişikliklerin etkili olması için bilgisayarınızı yeniden başlatın.


2
DefaultLimitNOFILE=65535hile yaptım. Ama neden /etc/security/limits.conf çalışmıyor?
Suvitruf, Monica

6
GUI girişi, görünüşe göre /etc/systemd/system.confterminal oturumları ( /etc/security/limits.conf) için normal konfigürasyondan bağımsız olan kendi yapılandırmasına ( ) sahip olan systemd'yi kullanır . Neden bu şekilde uygulandığını bilmek için sistemd hakkında yeterince bilgim yok.
mkasberg

1
Bir göz ardı çünkü @Suvitruf systemd sisteme. Bir cevap gönderiyorum.
Marc.2377

1
Sadece, rootkullanıcı için limitlerin *grup belirticileri tarafından belirtilemediğini belirtmek isterim . rootdeğişmez açıkça belirtilmelidir.
Petr Javorik

2
Bu benim için çalışıyor, bir yeniden başlatmadan sonra .
Shihe Zhang

14

/etc/security/limits.confDosyadaki herhangi bir şeyi değiştirmenize gerek yok , systemd kullanıyorsanız yoksayılır.

( ağdaki başka bir soruya değiştirilmiş bir cevap çoğaltılması ...)

Varsayılanı /etc/systemd/system.confve /etc/systemd/user/confdosyaları düzenlememeyi tercih edenler için bir alternatif :

  1. /etc/systemd/system.conf.d/limits.confbu içeriğe sahip yeni bir dosya oluşturun :

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. systemctl daemon-reexeckök olarak çalıştırmak

  3. çıkış yap ve tekrar giriş yap

  4. ile yeni limitinizi kontrol edin ulimit -n.

Detaylar için systemd-system.confman sayfasına bakınız.


Ubuntu 18.10 sistemimde söz konusu dosya yer almaktadır /etc/systemd/system.conf. Orada değişiklik yapmak hile yapmış gibi görünüyor, teşekkür ederim.
Stephen Kennedy,

1
Sadece benim için çıkış yapmadım (Ubuntu 18.04) işe yaramadı ama yeniden başlatma işlemi yaptı. Çok şık bir çözüm, teşekkürler.
stann1

0

Ubuntu 17.04 kullanarak, tarif edilen zor limiti elde ettim:

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

Kullanarak düşürebilirim ulimit, ancak arttıramazdım, tıpkı soruda açıklandığı gibi. ulimitkılavuz açıklar:

sadece root zor limiti artırabilir.

Böylece /etc/security/limits.confböyle bir üst sınır koymak istedim :

user hard nofile 9999

ve yeni bir giriş ssh localhost -l useryapmam yeni limiti verdi:

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

Umarım bu sizin için de işe yarar.


0
  1. /etc/systemd/system/sonar.service dosyasını düzenleyin

  2. Servis altındaki bu iki satırı ekle

[Hizmet]

LimitMEMLOCK = sonsuz

LimitNOFILE = 65535

  1. systemctl daemon-yeniden yükle
  2. systemctl sonar'ı yeniden başlat

bu benim için çalışıyor.


0

TL; DR Cevapları konsantre etmem gerektiğini hissettim, bu yüzden bulmaları daha kolay. Düzgün çalışmasını sağlamak için tüm parçaları bir araya getirmem yıllar aldı ...

Dikkat edilmesi gereken 2 yer var.

  1. GUI oturumu

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

    veya daha iyisi:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. kabuk ortamı

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

    veya daha iyisi:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Yukarıdaki dosyalardaki ayarları değiştirdikten sonra yeniden başlatın ve sonra limitleri kontrol edin: ulimit -n -Hn -Sn

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.