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

121

Ubuntu Sürüm 12.04'te (kesin) 64-bit Kernel Linux 3.2.0-25-virtual

'da gerçekleşiyor

Bir kullanıcı için izin verilen açık dosya sayısını artırmaya çalışıyorum. Bu, 1024 akım sınırının yeterli olmadığı tutulma java başvurum için.

Şimdiye kadar bulduğum yayınlara göre, satırları satır içine koyabilmeliyim

/etc/security/limits.conf şunun gibi:

soft nofile 4096
hard nofile 4096

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

Ama bu benim için çalışmıyor ve bence sorun o dosyayla ilgili değil.

Tüm kullanıcılar için, /etc/security/limits.conf dosyasında (bu dosyayı değiştirdikten sonra yeniden başlattım) ne olursa olsun, varsayılan sınır 1024'tür.

$ ulimit -n
1024

Şimdi, /etc/security/limits.conf dosyasındaki girişlere rağmen bunu arttıramıyorum:

$ ulimit -n 2048

-bash: ulimit: açık dosyalar: sınırı değiştiremez: İşlem izinli değil Garip kısım, aşağıya doğru sınırını değiştirebilmem, fakat onu, orijinal sınırın altındaki bir sayıya geri dönmek için bile değiştiremem:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

Kök olarak, bu sınırı istediğim gibi yukarı veya aşağı değiştirebilirim. Hatta / proc / sys / fs / file-max

içinde sözde sistem çapında sınırı umursamıyor bile.
# cat /proc/sys/fs/file-max
188897

# ulimit -n 188898
# ulimit -n 
188898

Ancak root olarak çalışmaya devam edersem bile, "Çok Fazla Açık Dosya" istisnası nedeniyle uygulamam hala çöküyor!

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

Bunu düzgün bir şekilde nasıl yapmalıyım? Diğer birkaç yazıya baktım ama şans yok!

    
sordu iCode 11.07.2012 04:06

3 cevap

120

ulimit komutu varsayılan olarak, sizin (bir kullanıcının) indirebileceği, ancak artamayacağınız HARD limitlerini değiştirir.

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

Aslında ulimit 'si ulimit -S ' si ile eşleştirdim, dolayısıyla her zaman için yumuşak sınırlara göre varsayılan değerdir.

alias ulimit='ulimit -S'

Sorununuzla ilgili olarak, girişlerinizde /etc/security/limits.conf dosyasında bir sütun eksik.

FOUR sütunları olmalı, ancak ilk örnekte eksik.

* soft nofile 4096
* hard nofile 4096

İlk sütun, WHO'nun uygulanacak limiti tanımlar. '*' tüm kullanıcılar için bir joker karakterdir. Kök sınırlarını yükseltmek için, '*' yerine 'root' kelimesini açıkça girmelisiniz.

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

session required pam_limits.so
    
verilen cevap lornix 11.07.2012 04:16
15

Kullanıcı bazında yumuşak ve sert sınırlar kullanırsanız, aşağıdaki gibi bir şey kullanabilirsiniz:

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

ayarlarınızın bu belirli kullanıcı için çalışıp çalışmadığını kontrol etmek için.

    
verilen cevap Jeroen Teeuwen 12.09.2013 12:34
4

Bunu çalışmak için çok fazla sorun yaşıyorum.

Aşağıdakileri kullanmanız, kullanıcı izniniz ne olursa olsun onu güncellemenize izin verir.

sudo sysctl -w fs.inotify.max_user_watches=100000
    
verilen cevap Layke 10.07.2015 17:41

Etiketlerdeki diğer soruları oku