Açık dosya limitlerini hangi komut kontrol eder?


19

OS X'te hangi dosya / komut dosyası açık dosya sınırlarını kontrol ediyor? OS X 10.5 / 10.6 / 10.7 için farklı bir komut var mı? Aşağıda keşfetmek seçenekleridir ulimit, sysctlvelaunchctl

"Çok fazla açık dosya" görünüşte, Leopard’da, belki de OS X’in diğer sürümlerinde yaygın bir hatadır:

Açık dosya sınırlarını görmenin birçok (ilgili?) Yolu vardır:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 512
virtual memory          (kbytes, -v) unlimited


$ launchctl limit
cpu         unlimited      unlimited      
filesize    unlimited      unlimited      
data        unlimited      unlimited      
stack       8388608        67104768       
core        0              unlimited      
rss         unlimited      unlimited      
memlock     unlimited      unlimited      
maxproc     1024           2048           
maxfiles    2048           4096       

$ sysctl -a | grep files
kern.maxfiles = 32768
kern.maxfilesperproc = 16384
kern.maxfiles: 32768
kern.maxfilesperproc: 16384
kern.num_files: 2049

Yukarıdaki mesajların bazılarında, bunların aşağıdaki komutlarla değiştirilebileceği iddia edildi:

sudo launchctl limit maxfiles 16384 32768
sudo ulimit -n 32768
sudo sysctl -w kern.maxfilesperproc=16384
sudo sysctl -w kern.maxfiles=32768

Ancak, yukarıda komutların dışına, sadece sysctlkomutlar tüm görünüşte bir etkiye sahip (yani ulimit -nve launchctl limitsüre girildikten yukarıdaki komutları sonra herhangi bir değişiklik gösterecektir sysctl -aistenen değişiklikleri gösterir).

İşletim sistemi için bu parametreleri değiştirmek için uygun yerler şunlardır:

/etc/sysctl.conf
/etc/launchd.conf

Ben de bir tane keşfettim cevabı okur ulimityalnızca geçerli kabuk kontrol eder.

MacOS'ta max dosyaları / maks. Açık dosya limitlerini nasıl ayarlayabilirim ?

Yanıtlar:


9

Basit cevap, çok sayıda sınır olduğu ve belirli bir durumda ulaştığınız en düşük sınırın hataya neden olduğu idi. Şimdi 10.12'de launchctl limit maxfilesde karışımda. Uygulama hakkındaki detaylar için, bu harika cevap ödül almak ve verebileceğimden daha fazla oyu hakediyor.

diğer ilgili konular:

ulimitSeviye açık dosyalarla çekirdek sel itibaren bir fakir shell script önlemek için düşük ayarlanmıştır.

En kern.maxfilesperprocfazla dosya sayısında küçük bir yer bırakmak için bir işlem yapılır, böylece bir işlem en çok çekirdeğin açık dosya işleyici alanını kullanabilir.

Normal durumlar kern.maxfilesiçin son sınırlayıcı faktördür.

Sierra'da - limitler 256 açık dosya ve sınırsız max. Dosyalar. Geliştirme sunucularımızı 256 sınırında tutmak istiyoruz, böylece geliştirme / aşamalandırma ve test sırasında sızan ve sorunlu yazılımları üretimde bulmaktan ziyade yakalayabiliriz.

10k dosya hayranı değilim - belki APFS ve NVMe depolama alanlarıyla, düşünülemez olan bir gün göreceğiz, ancak dosya sınırlarınız için yüzlerce veya düşük binlerce kişiyi takmaya çalışın. Özellikle eğer mac'unuzun işlem limiti düşükse , bu kadar az işlem tarafından açılan çok fazla dosyanın olması sorunlu olabilir.


9

Her OS X sürümü için açık dosya limitini değiştirmek için tamamen farklı bir yöntem var gibi gözüküyor.

OS X Sierra (10.12.X) için yapmanız gerekenler:

1. yılında Library/LaunchDaemonsadlı bir dosya oluşturmak limit.maxfiles.plistve içinde aşağıdakileri (sırasıyla yumuşak ve sert sınırları iki sayıyı (değiştirmekten çekinmeyin) yapıştırın:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"  
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>64000</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist> 

2. Yeni dosyanızın sahibini değiştirin:

sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist

3. Bu yeni ayarları yükleyin:

sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

4. Son olarak, sınırların doğru olduğunu kontrol edin:

launchctl limit maxfiles

İkinci değeri 'sınırsız' olarak ayarlayarak maxfilleri bu şekilde sınırsız olarak ayarlamakta zorlanıyor gibiyim. Düşüncesi olan var mı?
user200857

7

Aşağıdakiler en yaygın sorunları çözmelidir (ve hiyerarşilerine göre sıralanırlar):

echo 'kern.maxfiles=20480' | sudo tee -a /etc/sysctl.conf
echo -e 'limit maxfiles 8192 20480\nlimit maxproc 1000 2000' | sudo tee -a /etc/launchd.conf
echo 'ulimit -n 4096' | sudo tee -a /etc/profile

Notlar:

  1. Bu değişikliklerin etkili olması için yeniden başlatmanız gerekecek.
  2. AFAIK, OS X kapsamında artık 'sınırsız' sınırlarını ayarlayamazsınız.
  3. launchctl maxfiles, sysctl maxfiles tarafından sınırlandırılmıştır ve bu nedenle onları aşamaz.
  4. sysctl, kern.maxfilesperproc dosyasını launchctl maxfiles yazılımından devralmış görünüyor
  5. ulimit, varsayılan olarak launchctl'deki 'open files' değerini devralmış görünüyor
  6. / etc / profile veya ~ / .profile içinde özel bir ulimit ayarlayabilirsiniz; bu gerekli olmasa da bir örnek verdim
  7. Bu değerlerden herhangi birini varsayılan değerlerine kıyasla çok yüksek bir sayıya ayarlarken dikkatli olun - özellikler kararlılık / güvenlik vardır. Makul olduğuna inandığım bu örnek numaraları başka web sitelerinde yazılı olarak aldım.

0

Basit bir deyişle:

  • ulimitKomut "kabuk ve süreçlere yarattığı mevcut kaynaklar üzerinde kontrol" (: bakınız sağlar help ulimitve man bash). Kabuğa verilen kaynaklar sistem kaynak limitleri ile sınırlıdır.

  • launchctlGeçerli işlem tarafından kontroller maksimum sistem kaynağı tüketimi (: bakınız man setrlimitve man launchctl). Maksimum değerler çekirdek sınırları ile sınırlıdır.

  • sysctlKontroller limitleri (: bkz çekirdek man sysctlve BSD'lerin Ayar Çekirdek Sınırları ).

Sınırları arttırmak için, soruna bağlı olarak komutların her birini kullanabilirsiniz.

Ayrıca bakınız: `launchctl limit` ve` ulimit` arasındaki ilişki nedir?


Çok fazla açık dosyadaki sorun için bu, hangi yumuşak veya zor sınırın tam olarak ulaşıldığına (yerel bir kabuk komut dosyası, çalıştırılan genel komut dosyası root, bir uygulama veya aynı anda tüm işlemler olmasına bağlı) bağlıdır . Tüm sınırları (kabuk, lansman ve çekirdek sınırları) arttırmaya değer .

Sınırları kalıcı olarak artırmak için, bkz . Mac'te maksimum sistem kaynağı tüketimi nasıl sürekli kontrol edilir?

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.