Debian'da çok fazla açık dosya


15

Debian'da uzun süredir çalışıyorum. Bir noktada bir hata atın:

Çok fazla açık dosya.

Koşu:

ulimit -a

gösterileri:

açık dosyalar (-n) 1024

Açık dosya sayısını 2 kat arttırmak istiyorum. Yürütmeden sonra

ulimit -n 2048

bu sınır oturumumun sonuna kadar etkindir ve bu görev için geçerli değildir.

Açık dosya sayısını kalıcı olarak nasıl artırabilirim?

Yanıtlar:


12

İşleminiz bir komut dosyası aracılığıyla başlatılırsa, arka plan programını çalıştırmadan hemen önce ulimit çağrısını komut dosyasına yerleştirebilirsiniz.

Kullanıcılarınız veya tüm kullanıcılar için ulimit değerini artırmak isterseniz, oturum açarken uygulanan sınırları belirleyebilirsiniz pam_limits. Bunlar ayarlanır /etc/security/limits.conf. Sizin durumunuzda şöyle bir şey yapabilirsiniz:

*               hard    nofile             2048

"Sabit" öğesinin, aşılamayan ve değiştirilemeyen bir sabit sınırı ifade ettiğini unutmayın. Yazılım sınırı kullanıcı tarafından değiştirilebilir (örneğin kök yetenekleri olmayan biri), ancak donanım sınırının ötesinde olamaz.

Kullanımı hakkında limits.confdaha fazla bilgi için pam_limits.


Konf sınırlarında 2 satırım var: * yumuşak nofile 4096 * sert nofile 8192 Etkisi olmayan.
FoxyBOA

Ve bunları test ettikten sonra çıkış yaptınız mı? Bu X / GNOME / KDE vb sağ out günlüğü anlamına gelecektir, yerel bir makinede bu çalışıyorsanız
Daniel Lawson

Evet. /etc/security/limits.conf benim için çalışmıyor. İkinci yaklaşımı deneyeceğim.
FoxyBOA

3
/etc/security/limits.conf yalnızca pam ve pam_amits pam modülünü kullanan hizmetler için çalışır (her hizmetin PAM yapılandırması ve /etc/pam.d/common-* için bkz. /etc/pam.d/) . Bu nedenle, sshd, gdm, login, vb. Tarafından oluşturulan tüm kullanıcı oturumlarıyla ilgilidir. Önyükleme zamanında başlayan tüm programları ilgilendirmez ...
Raphaël Hertzog

Bu konuda bir şey söyledim, ama açıkladığınız için teşekkürler. OP, kullanıcısının çalıştığı bir hizmet veya işlem olup olmadığını netleştirmedi.
Daniel Lawson

13

Ayrıca, çekirdekte ayarlanmış açık dosyaların "toplam maks." Değeri vardır, mevcut ayarı şunlarla kontrol edebilirsiniz:

cat /proc/sys/fs/file-max 

Ve şunlarla yeni bir değer ayarlayın:

echo "104854" > /proc/sys/fs/file-max

Yapılandırmayı yeniden başlatmalar arasında tutmak istiyorsanız

sys.fs.file-max=104854

için

/etc/sysctl.conf

Geçerli maksimum dosya kullanımını kontrol etmek için:

[root@srv-4 proc]# cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)


Mine Buraya biraz müstehcen numaraları gösterir: 49152 0 18446744073709551615 . İlk iki sütunun neden üçüncüye kadar eklenmediğini anlamıyorum. Mevcut 1.8 trilyon trilyon varsa, hepsini nasıl kullandığımı görmüyorum.
mlissner

4

Diğerlerinin söylediği gibi, /etc/security/limits.conf içinde kullanıcı veya grup başına belirli sınırlar uygulayabilirsiniz.

Not: ulimit -n yumuşak sınırı gösterir.

ulimit -H -n 

size zor sınırı gösterecektir.

Bu, örneğin, sabit sınır çıktısını görmeyi beklediğiniz gibi 1024'ten 4096'ya dosya sayısını artırıyorsanız, ulimit -a ve ulimit -n çıktısını oldukça kafa karıştırıcı yapar, ancak yine de yumuşak olan 1024'ü görüyorsunuz. sınırı.

Ayrıca, bu sınırların giriş başına uygulandığını unutmayın, bu nedenle yeni bir kabukta tekrar giriş yapın ve değişikliklerinizi kontrol edin, mevcut girişlere yayılmalarını beklemeyin.


2

İşleminizi start-stop-daemon ayarlayarak çalıştırırsanız /etc/security/limits.conf dosyasında ulimits ayarının çalışmadığını unutmayın. Örneğin tomcat için açık dosya sınırını 20000'e yükseltmek istiyorsanız, bunları satırlara eklemeniz gerekir /etc/default/tomcat:

ulimit -Hn 32768
ulimit -Sn 32768

Bu sorun ile ilgili olarak debian 6.0.4 ile karşılaştım.


1

Bu, uzun süren işleminize nasıl başladığınıza bağlıdır. Önyükleme zamanında başlatılırsa (/etc/rcX.d/* komut dosyaları aracılığıyla), varsayılan sınır çekirdek tarafından ayarlandığından ve yeniden derlenmeden ayarlanamadığından başlangıç ​​komut dosyanızda bir ulimit çağrısı koymanız gerekir.

Kullanma /etc/security/limits.confKullanmak eğer işe yarayabilir cronböyle bir girişle örneğin başlatmak için:

@reboot $HOME/bin/my-program

/Etc/pam.d/cron pam_limits.so komutunu etkinleştirdiğinden bu işe yarar.


-1

Bunu /etc/security/limits.conf dosyasına ekleyebilirsiniz.

root soft nofile 100000
root hard nofile 100000

kaydedin ve yeniden başlatın.


3
Burada bu 5 yaşındaki sorunun kabul edilen cevabında olmayan yeni bir şey var mı?
Andrew Schulman

-2

Çok güzel bir komut ulimit -nama çok fazla bağlantı ve çok fazla açık dosya ile ilgili bir sorun var:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 519357
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Cevabınızı temizlemeye çalıştım ama orijinal posterler sorusuna ne söylemeye çalıştığınız hala belirsiz. Bunu daha fazla temizlemeyi deneyebilir misin?
slm

Ayrıca bu çıktı ulimit -adeğil ulimit -n.
Yvan
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.