Linux'un açabileceği dosya sayısında nasıl bir sınır belirleyebilirim?


11

Kullanarak bir Java uygulaması çalıştırmayı planlıyorum nohup ... &. Sınır, bunun gibi komutlar için geçerli olmalıdır.


Ama bu benim java programımda bir hataya neden oldu

Yanıtlar:


7

Çoğu sistem PAM kullanır ve pam_limitsmodülün limitlerini temel alır /etc/security/limits.conf. Açık dosyalar için kullanıcı başına sınır çağrılır nofile. Her kullanıcı veya belirli bir kullanıcı veya grup için ayarlayabilirsiniz ve kullanıcının geçersiz kılabileceği (yumuşak sınır) ve yalnızca kökün geçersiz kılabileceği (sabit sınır) bir sınır belirleyebilirsiniz. Dokümantasyon ve limits.confadam sayfası detayları var. Örneğin, sınırı herkes için 50000'e çıkarmak için bu satırı girin /etc/limits.conf(ayar, oturum açtığınızda geçerli olur):

* - nofile 50000

içinde limits.confyapmak * hard nofile 50000ve / veya * soft nofile 50000. Sert ve yumuşak arasındaki teknik farkı bilmiyorum ve her ikisini de yaptım.
ron

Örneğin, tcsh kullanarak SLES 11.4 limit descriptors 50000içinde, verilen terminal penceresi / oturumu içindeki değeri değiştirmek mümkündür .
ron

İkinci sütundaki @ron -` hem yumuşak hem de sert sınırı ayarlar. Bunları yalnızca farklı değerler istiyorsanız ayrı olarak ayarlamanız gerekir. Yazılım sınırı ulimit( limitcsh olarak adlandırılır ) çalıştırılarak herhangi bir zamanda değiştirilebilir . Ayrıcalıklı bir kullanıcı hiçbir zaman sabit sınırdan daha yüksek olamaz.
Gilles 'SO- kötü olmayı bırak'

sadece sert ayarlanmışsam, yumuşak değer varsayılan olarak kalır mı? yalnızca yumuşak ve sert değilse, sabit varsayılan değer mi yoksa doğal olarak eşit yumuşak değer olarak mı kalır? Yumuşak> sert olarak ayarlayabilir miyim? Yumuşak olan gerçek değerdir? sorular için özür dilerim.
ron

@ron Yumuşak limit otomatik olarak sabit limitte sınırlanır. Yalnızca sabit sınırı ayarlarsanız, yumuşak sınır max olarak ayarlanır (default_soft_limit, actual_hard_limit).
Gilles 'SO- kötü olmayı bırak'

4

fs.file-max = <your number>içine ekleyebilirsiniz /etc/sysctl.conf. Sonra yeniden başlatın.


cat / proc / sys / fs / file-max 169203 ,, ancak ulimit -n 1024

Yeniden başlatmaya gerek yok. Sadece koş sysctl fs.file-max=123456. ( /etc/sysctl.confönyükleme sırasında sysctliçeriği çağıran bir komut dosyası tarafından okunur .)
Gilles 'SO- kötü olmayı bırak'

3
ulimit -n

işlem ayarlarında değişiklik yapabilir ve

/proc/sys/fs/file-max

veya sysctl değişkeni fs.file-maxsistem genelindeki değeri okumak ve ayarlamak için kullanılabilir


cat / proc / sys / fs / file-max 169203 , ancak ulimit -n 1024

1

Bunun için ulimit kullanabilirsiniz:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Her ne kadar bu tür ayarlamalara başvurmadan önce çok fazla dosya tanıtıcısı açmanın kesinlikle gerekli olduğundan emin olmalısınız. Bir döngüde bir inputstream.close () yapmayı unuttuğunuz için maksimum dosya tanıtıcılarını artırmak yalnızca temel sorunu erteleyecektir.


1
Çok sayıda müşteriye bağlanmak istiyorum

1

Her program örneği için ulimit (Bash komutu - man bash kullanın veya kabuğunuz için benzer olanı bulun) kullanın. Ne yaptığınızı bilmiyorsanız global sistem sınırlarını kullanmayın - olası DoS.


SLES 11.4 ben belirledik nofileiçinde limits.confbaşarıyla 100000 olmaktır. Çok büyük bir ayarın SSH ile giriş yapmasını engellediğini kanıtlayabilirim ve sistemi kurtarmak için dvd'den önyükleme yapmak zorunda kaldım.
ron

0
vi ~/.bashrc

Ve dosyanın sonuna bir satır ekleyin

ulimit -n 169203
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.