Soru Yüksek hacimli sistem için pratik maksimum açık dosya tanımlayıcıları (ulimit -n)


Kısa bir süre önce uygulamamızın yük testini yapmaya başladık ve yaklaşık 24 saat sonra dosya tanımlayıcılarının tükendiğini fark ettik.

Dell 1955’te RHEL 5’i kullanıyoruz:

CPU: 2 x Çift Çekirdekli 2.66GHz 4MB 5150 / 1333FSB RAM: 8 GB RAM HDD: 2 x 160 GB 2,5 "SATA Sabit Sürücüler

Dosya tanımlayıcı sınırını kontrol ettim ve 1024'te ayarlandı. Uygulamamızın 1000'e yakın gelen bağlantıya ve 1000'e yakın bağlantısına sahip olabileceği düşünüldüğünde, bu oldukça düşük görünüyor. Açılması gereken herhangi bir gerçek dosyadan bahsetmemek.

İlk düşüncem, ulimit -n parametresini sadece birkaç mertebede arttırmak ve daha sonra testi tekrarlamaktı ancak bu değişkeni çok yüksek bir şekilde ayarlamanın potansiyel sonuçlarını bilmek istedim.

Bunu, yazılımımızın kuramsal olarak kaç dosya tanımlayıcısını açabileceğimizi belirlemekten daha iyi uygulamalar var mı?


69
2017-07-31 22:35


Menşei




Cevaplar:


Bu sınırlar, birden fazla "normal" kullanıcının (uygulamaların değil) sunucuyu paylaşacağı bir zamandan geldi ve çok fazla kaynak kullanmasını engellemenin yollarını aradık.

Yüksek performanslı sunucular için çok düşüktür ve genellikle onları çok yüksek bir sayıya ayarlarız. (24k ya da öylesine) Eğer daha yüksek sayılara ihtiyacınız varsa, sysctl dosya-max seçeneğini de değiştirmeniz gerekir (genellikle ubuntu'da 40k ve rhel'de 70k ile sınırlıdır).

Ulimit ayarı:

# ulimit -n 99999

Sysctl max dosyaları:

#sysctl -w fs.file-max=100000

Ayrıca, ve çok önemlisi, uygulamanızın bir bellek / dosya tanımlayıcısı sızıntısı olup olmadığını kontrol etmeniz gerekebilir. Geçerli olup olmadığını görmek için açık olan her şeyi görmek için lsof kullanın. Uygulama hataları hakkında çalışmak için sisteminizi değiştirmeye çalışmayın.


70
2017-08-01 13:08



@sucuri teşekkürler. Kaynak sızıntıları konusunda kesinlikle endişeliyiz, ancak durum böyle görünmüyor. Hem lsof hem de netstat'ı izliyoruz ve sayılar yüksekken, büyümeye devam etmiyorlar, genişliyor ve daralıyorlar. Bir sızıntı olsaydı, açık soket veya tanımlayıcıların sayısının zamanla büyümeye devam edeceğini umuyorum. - Kevin
ulimit limit kullanıcı başına değil, işlem başına! Görmek unix.stackexchange.com/questions/55319/...  Ve fs.file-max ayar bir bütün olarak sunucu içindir (bu nedenle tüm süreçler birlikte). - Tonin


Her zaman sadece

cat /proc/sys/fs/file-nr

Kaç dosya tanıtıcısının kullanıldığını görmek için 'yüksek yük' durumu sırasında.

Maksimum olarak - sadece ne yaptığınıza bağlı.


13
2018-05-18 12:22



Burada, yukarıdaki komut bana gösterdiğinde 143000'in yeterince iyi olduğunu düşünüyordum 8288 0 793377! - Sridhar-Sarnobat


Dosya tanımlayıcıları tcp soketleri vb. İse, soket arabellekleri ve diğer çekirdek nesneleri için büyük miktarda bellek kullanmama riskiyle karşı karşıya kalırsınız; Bu bellek değiştirilemez.

Fakat aksi halde hayır, prensipte sorun olmaz. Ne kadar çekirdek belleğin kullanılacağını denemek ve / veya test etmek için çekirdek belgelerine bakın.

Veritabanı sunucularını büyük bir sorun olmadan açık (çoğunlukla gerçek disk dosyalarında) açık olan 10k dosya tanıtıcıları ile çalıştırıyoruz, ancak bunlar 64-bit ve bir sürü ram içeriyor.

Ulimit ayarı işlem başına, ancak sistem çapında bir sınır da var (varsayılan olarak 32k düşünüyorum)


6
2017-08-01 12:27





En iyi uygulamalardan kişisel olarak haberdar değilim. Sistem işlevine bağlı olarak biraz özneldir.

Gördüğünüz 1024'ün, kullanıcı başına bir sınır olduğunu ve sistem çapında bir sınır olmadığını unutmayın. Bu sistemde kaç uygulama çalıştırdığınızı düşünün. Tek mi bu? Bu uygulamayı çalıştıran kullanıcı başka bir şey yapıyor mu? (IE, potansiyel olarak kaçabilecek komut dosyalarını çalıştırmak ve çalıştırmak için bu hesabı kullanan insanlar var mı?)

Kutu sadece bu tek uygulamayı çalıştırıyor ve söz konusu uygulamayı çalıştıran hesabın sadece bu amaç için olduğu düşünüldüğünde, önerdiğiniz gibi sınırınızı artırmanın bir zararı olmadığını görüyorum. Eğer bir in-house dev ekibi ise, onların fikirlerini isterdim. Üçüncü taraf bir satıcıdan geliyorsa, belirli gereksinimleri veya önerileri olabilir.


2
2017-07-31 22:53



@Grahamux Sistem bu uygulamaya adanmıştır ve uygulamayı çalıştıran kullanıcı sadece bu uygulamayı çalıştırır. Evdeki dev ekibin bir parçasıyım, o yüzden yardım yok. - Kevin
Limit kullanıcı başına değil, işlem başına. Görmek unix.stackexchange.com/questions/55319/... - Tonin


Bu bana "bir geliştirme ortamında test et" ile en iyi yanıtlanan sorulardan biri gibi görünüyor. Yıllar önce hatırlıyorum Güneş, bununla uğraşırken sinirlenmişti, ama o gergin değil. Zaman sınırı 1024'tü, bu yüzden şimdi Linux için aynı şeyin daha yüksek olduğunu görmek için biraz şaşırdım.

Sorunuza verilen cevaplara baktığımda aşağıdaki bağlantı eğitimini buldum: http://www.netadmintools.com/art295.html

Ve bu da: https://stackoverflow.com/questions/1212925/on-linux-set-maximum-open-files-to-unlimited-possible


1
2017-08-01 00:51