Ulimit -n ve / proc / sys / fs / file-max arasındaki farklar nelerdir?


32

EC2'den yeni başlattığım yeni bir CentOS görüntüsünde ulimit varsayılanının 1024 açık dosya olduğunu ancak / proc / sys / fs / file-max'in 761.408 olarak ayarlandığını ve bu iki sınırın nasıl çalıştığını merak ediyorum birlikte. Ulimit -n'nin, / proc / sys / fs / file-max sistem genelinde iken kullanıcı başına dosya tanımlayıcı sınırı olduğunu tahmin ediyorum. Bu durumda, aynı kullanıcı olarak iki kez giriş yaptığımı söyleyin - oturum açan her kullanıcının açık dosya sayısı konusunda 1024 sınırı var mı, yoksa oturum açanların her biri arasında 1024 numaralı ortak dosya sınırı var mı? kullanıcılarda

Sisteminiz çok fazla dosya açmıyorsa, maksimum dosya tanımlayıcınızı çok yüksek bir değere ayarlamanın çok fazla etkisi var mı?


Eklenen etiketler: bash linux çekirdek sistem kaynakları
Warner

Yanıtlar:


28

file-maxÇekirdek düzeyinde uygulanan ve artırılmadan tüm işlemler tarafından geçilemeyen maksimum Dosya Tanımlayıcıları (FD). ulimit , daha düşük olabilen bir işlem seviyesinde uygulanır file-max.

Artan performansta etki riski yoktur. file-max . Modern dağıtımlar maksimum FD'ye oldukça yüksektir, oysa geçmişte 1024'ü geçmesi için çekirdek yeniden derlemesi ve modifikasyonu gerekir. Teknik bir gereksiniminiz olmadıkça sistem genelinde artmazdım.

İşlem başına yapılandırma genellikle bir veritabanı veya bir Web sunucusu gibi belirli bir arka plana hizmet vermek için ayarlanmak zorundadır. Sınırı tamamen kaldırırsanız, bu arka plan programı tüm mevcut sistem kaynaklarını tüketebilir; yani, sıfırlama düğmesine basmadan veya güç döngüsünden başka sorunu çözemezsiniz. Elbette, bunlardan herhangi birinin açık dosyaların bozulmasına neden olması muhtemeldir.


Anlayışım doğru mu, ulimit kullanarak ayarlanan kullanıcı başına limitlerin tüm kullanıcılar için aynı olduğunu? Kullanıcı başına farklı değerler kullanmanın bir yolu var mı?
Oliver

Evet, ayarlar hem genel olarak hem de kullanıcı bazında ayarlanabilir.
Warner

Görevinizi doğru alırsam, bu doğru değil. Bu, xy kullanıcısı tarafından
yaratılan işlem başınadır

3
ulimitLimit ama süreç kullanıcı başına değil! Bkz. Unix.stackexchange.com/questions/55319/…
Tonin

@Tonin - Evet, bu cevap sadece yanlıştır.
Nemo

11

Ulimitin sınırlandırılması benzersiz kullanıcı başınadır. Bu nedenle, kullanıcı1, kaç kez oturum açtığınıza veya çalışan işlemlere bakılmaksızın 1024 ile sınırlı olacaktır.

Bu cümlenin anlamını tamamen anlayıp anlamadığımdan emin değilim (İngilizce ana dilim değil) Bu cümle, dosya tanımlayıcıları için ulimit yapılandırmasının işlem başına bir sınırlama olmadığı anlamına gelirse, kabul edilen cevap (AFAIK) yanlıştır.

Demek istediğim, eğer bir kullanıcı 4 işlem başlattıysa ve FD'ler için ulimit konfigürasyonu 1024 ise, her işlem 1024 FD açabilir. Kullanıcı 1024 FD ile sınırlı kalmayacak, kullanıcı tarafından başlatılan işlemlerle sınırlandırılacak.

Örneğin:

me@superme:~$ ulimit -n
1024
me@superme:~$ lsof | grep $USER | wc -l
8145

İşte sınıra ulaştığımız perl örneği (bu işlem başına bir limittir):

#!/usr/bin/perl

$count = 0;
@filedescriptors;

while ($count <= 1024) {
    $FILE = ${count};
    open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
    push(@filedescriptors, $FILE);
    $count ++;
}

Sonuç:

FDs: 1021 Too many open files at ./test.pl line 8.

1021 çünkü while döngüsüne erişmeden önce 3 açık dosya tanıtıcısı vardı (stdout, stdin ve stderr)

Kusura bakma, yanlışysam ya da cevabı yanlış anladıysam özür dilerim.


Demek haklısın. @ Warner'ın cevabı bu anlamda yanlıştır, çünkü limit kullanıcı başına değil işlem
bazındadır
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.