Kök olmayan bir kullanıcı için açık dosya sınırını nasıl artırabilirim?


143

Bu Ubuntu Sürüm 12.04 (kesin) 64-bit Çekirdekli Linux 3.2.0-25-sanal'da gerçekleşiyor

Bir kullanıcı için izin verilen açık dosya sayısını artırmaya çalışıyorum. Bu, tutturma java uygulamam için geçerlidir.

Şimdiye kadar bulduğum yayınlara göre, satırlara girmem gerekiyor

/etc/security/limits.conf bunu beğendi:

soft nofile 4096
hard nofile 4096

Tüm kullanıcılar için izin verilen açık dosya sayısını artırmak.

Ama bu benim için çalışmıyor ve sorunun bu dosyayla ilgili olmadığını düşünüyorum.

Tüm kullanıcılar için, varsayılan limit, /etc/security/limits.conf içinde ne olduğuna bakılmaksızın 1024'tür (Bu dosyayı değiştirdikten sonra yeniden başlattım)

$ ulimit -n
1024

Şimdi, /etc/security/limits.conf girişlerine rağmen şunu artıramam:

$ ulimit -n 2048

-bash: ulimit: açık dosyalar: limiti değiştiremez: İşlem izin verilmez Garip kısım, limiti aşağıya doğru değiştirebildiğim , ancak yukarı doğru değiştirememem - orijinal sınırın altındaki bir sayıya geri dönmek için bile:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

Kök olarak, bu limiti istediğim, yukarı ya da aşağı olarak değiştirebilirim. Hatta sözde sistemde / proc / sys / fs / file-max sınırını önemsemiyor gibi görünüyor

# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

Ancak, root olarak çalışması için tutulma bile olsa, uygulamam hala "Çok Fazla Açık Dosya" istisnası nedeniyle çöküyor!

Şimdiye kadar, root olmayan bir kullanıcı için açık dosya limitini arttırmanın bir yolunu bulamadım.

Bunu doğru şekilde nasıl yapmalıyım? Birkaç başka mesaja baktım ama şans yok!


6
Ayrıca, düzenlemeden /etc/security/limits.confsonra, yeni maksimum limiti kullanabilmeniz için önce oturumu kapatıp tekrar açmanız gerekebileceğini unutmayın . Bunu yaptım ve ulimit -Hs1000000'e yükselttiğimde hala 1000 göstererek şaşırdım! Sonra çıkış yaptım ve tekrar giriş yaptım ve ulimit yeni miktarı gösterdi.
Cerin

GUI oturumu için bu konuyu önemli (Ubuntu 16+) de bulabilirsiniz .
Waldemar Wosiński

Yanıtlar:


142

ulimitVarsayılan olarak komut size (kullanıcı) düşürebilirsiniz SERT sınırları, değiştirir, ancak yükseltmek olamaz.

0- { HARD } arasında değişebilen SOFT sınırını değiştirmek için -S seçeneğini kullanın .

Aslında başka ad olması ulimitiçin ulimit -S, bu nedenle yumuşak sınırlara varsayılan her zaman.

alias ulimit='ulimit -S'

Sorununuz için, girişlerinizde bir sütun eksik /etc/security/limits.conf.

DÖRT sütun olmalı, ancak ilk örnekte eksik.

* soft nofile 4096
* hard nofile 4096

İlk sütun, limitin uygulanacağı DSÖ'nü açıklar. '*', tüm kullanıcılar anlamına gelen bir joker karakterdir. Kök sınırlarını yükseltmek için açıkça '*' yerine 'kök' yazmanız gerekir.

Ayrıca /etc/pam.d/common-session*aşağıdaki satırı düzenlemeniz ve sonuna eklemeniz gerekir :

session required pam_limits.so

1
Maksimum açık dosya tanımlayıcı sayısı için Sabit sınırını nasıl değiştiririm? Benim sorunum, Eclipse uygulamamın istediği kadar açık dosyaya sahip olmasına izin vermem gerekiyor ancak 4096'nın sınırı yeterli değil ve mümkün olan en yüksek 500000 değerine ayarlamak istiyorum. yıldızda bahsettiğiniz gibi ve yine de Sabit limit hareket etmiyor.
iCode

1
Peki, / proc / sys / fs / file-max değerini 188.897 olarak keşfettiniz ... Bu yüzden üst sınırınızın 188.000 (izin veriliyor) ila 500.000 (izin verilmez) arasında olduğunu söyleyebilirim. Aynı anda 65000'den fazla açık dosya gerektiren bir şeye sahip olduğunuzun aklını karıştırır. Vay. Genellikle bu büyük demirin üzerindedir. Bir programlamanın yanlış anlaşılmasından şüphelenirdim. (Tüm saygımla, lütfen)
lornix

4
İşte buydu: oturum gerekli pam_limits.so, teşekkürler!
ölümcül

13
İlk başta, jokerin sonunu özledim /etc/pam.d/common-session*ve yeni bir düzenleme common-sessionyaptım ve yeniden başlatmadan sonra bile çalışmadı. Ama (aynı satır ekleyerek sonra pam_limits.sokadar) common-session-noninteractive, ulimit -ntaze bir giriş (gerekli yeniden başlatma) sonra yeni değeri görüntülenir. FWIW Root sınırını değiştirmeye çalışıyordum (sadece).
Lambart

1
Ayrıca root olarak giriş yapıp yapmadığınızı kontrol edin. superuser.com/questions/1200539/…
Robbo_UK

20

Kullanıcı bazında yumuşak ve sert sınırlar kullanıyorsanız, şunun gibi bir şey kullanabilirsiniz:

su USER --shell /bin/bash --command "ulimit -n"

Ayarlarınızın o kullanıcı için çalışıp çalışmadığını kontrol etmek için.


5

Bunun işe yaraması için çok sorun yaşıyorum.

Aşağıdakileri kullanmak, kullanıcı izninizden bağımsız olarak güncellemenizi sağlar.

sudo sysctl -w fs.inotify.max_user_watches=100000

4
Ben aynı sorunu yaşıyorum çünkü bu denedim ama işe yaramadı$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster
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.