Dosya tanıtıcılarının sayısındaki sınırlamalar


34

Yüklemeye çalışıyorum ve 389-dsbana şu uyarıyı veriyor:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

Dosya tanımlayıcıları anlıyorum ama yumuşak ve zor sınırlar hakkında anlamıyorum.

Koşarken cat /proc/sys/fs/file-maxgeri dönüyorum 590432. Bu, en fazla 590432 dosya açabileceğimi (yani en fazla 590432 dosya tanımlayıcısına sahip olduğumu) içermelidir.

Ama kaçtığımda ulimit, bana farklı sonuçlar veriyor:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

Ancak, sert / yumuşak sınırlar nelerdir ve ulimitdepolanan sayı ile nasıl ilgilidir /proc/sys/fs/file-max?

Yanıtlar:


39

Göre çekirdek belgelerinde , /proc/sys/file-maxçekirdek boğulma önce tahsis edecek dosya tanımlayıcıları maksimum toplam küresel sayıdır. Bu, çekirdek sınırınızdır, mevcut kullanıcınız değil. Eğer Yani yapabilirsiniz 590432 açın (hiçbir cinleri çalıştıran, tek kullanıcı modu) Bir boşta sistem yalnızsın sağladı.

Belgelerin güncel olmadığını unutmayın: dosya proc/sys/fs/file-maxuzun zamandır. Bunu işaret ettiği için Martin Jambon'a teşekkürler.

Yumuşak ve sert sınırlar arasındaki fark burada SE'de cevaplandırılmıştır . Sert sınırı aşmamak koşuluyla, normal bir kullanıcı olarak yumuşak bir sınırı yükseltebilir veya düşürebilirsiniz. Ayrıca sabit bir limiti de düşürebilirsiniz (ancak bu işlem için tekrar yükseltemezsiniz). Süper kullanıcı olarak, hem sert hem de yumuşak limitleri yükseltebilir ve düşürebilirsiniz. İkili limit şeması, sistem politikalarını uygulamak için kullanılır, ancak sıradan kullanıcıların kendileri için geçici sınırlar belirlemelerine ve daha sonra bunları değiştirmelerine izin verir.

Yumuşak limitin altına sert bir limit düşürmeyi denerseniz (ve siz süper kullanıcı değilseniz), EINVALgeri alacağınızı (Geçersiz Bağımsız Değişken) unutmayın.

Bu nedenle, kendi durumunuzda, ulimit(aynı olan ulimit -Sf) kabuk ve alt işlemleri tarafından yazılan dosyaların boyutu üzerinde yumuşak bir sınırınız olmadığını söylüyor . (bu muhtemelen çoğu durumda iyi bir fikirdir)

Öbür çağırma, ulimit -Hnraporlar -nsınırı (açık dosya tanıtıcı maksimum sayı), değil-f yumuşak sınır sert sınırdan yüksek görünüyor yüzden sınırı. Eğer girerseniz ulimit -Hfda 'sınırsız' alırsınız.


14
Linux 4.4.0'da, dosya max yolu /proc/sys/fs/file-max.
Martin Jambon,

lütfen sabit limit ulimit -Hn sistemin tahsis edilmiş dosya tanımlayıcı yeteneklerinin sınırını hedefliyor mu?
Webwoman

2
@Webman: hayır, değil. ulimitsadece mevcut işlem için sınırları etkiler . Mevcut sürecin sınırları da çocuk süreçlerine aittir, ancak her sürecin ayrı bir sayısı vardır. Örneğin ulimit -Hn 10, herhangi bir anda yalnızca 10 dosya tanımlayıcınız olabilir. Oluşturduğunuz her alt işlem de yalnızca 10 dosya tanımlayıcısına sahip olabilir. Yalnızca süper kullanıcı ayarlandıktan sonra bir sınırı artırabilir. Birini çok düşük ayarlarsanız, tek seçeneğiniz kabuk işleminizi öldürmek ve yeni bir tane başlatmak olabilir.
Alexios

0

"Seç" sistem çağrısı, Windows 95'in bile kıyaslandığında çok iyi görünmesini sağlayan, unix'in çok korkunç beyin ölümü tasarım kararlarından biridir.

20 yıl önce yasaklanmış olmalıydı ve o zamana kadar sınırsız dosya işleyicisini sorunsuz bir şekilde çalıştırabilecektik.

Çekirdek yapılandırması ile kolayca dosya tanımlayıcı sayısını artırabilirsiniz ve ulimit BUT, eğer herhangi bir kütüphane "select" sistem çağrısı kullanıyorsa, programınızın kararsız hale geleceğini (bellek bozulması) ve başarısız olacağını unutmayın.

Select yalnızca 0 ila 1023 arasındaki dosya tanımlayıcıları idare edebilir ve birini daha yüksek bir değerle beslerseniz, hafızanızda rasgele olarak belirir ve seçim tanımlayıcıyı çalışma olarak asla tekrarlamaz. Maalesef birçok kütüphane select kullanıyor.


Yorumunuz yararlı bir uyarıdır, ancak bir zil sesi almak yerine, fd_set(3)man sayfasını alıntılamak ve sınırın gelmesi çok daha yararlı olurdu FD_SETSIZE. Ve en iyisi poll(3), bu cevapta
Davor Cubranic
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.