Snow Leopard'daki maksimum açık dosya tanımlayıcı sayısını artırın?


101

Çok sayıda dosya tanıtıcısı gerektiren bir şey yapmaya çalışıyorum

sudo ulimit -n 12288Snow Leopard'ın gitmek istediği kadar yüksek; bunun ötesinde

/ usr / bin / ulimit: satır 4: ulimit: açık dosyalar: sınırı değiştiremez: Geçersiz değişken.

Sayıyı çok daha yükseğe çıkarmak istiyorum, 100000 deyin. Mümkün mü?


4
Bu sorunun cevapları artık OSX Mavericks'te çalışmıyor.
Howard

2
echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confMavericks'te koşmak ve yeniden başlatmak benim için çalışıyor.
Lri

Yanıtlar:


95

ulimitKomut kullanmak, yalnızca geçerli kabuk ve çocukları için kaynak sınırlarını değiştirir ve sudo ulimitbir kök kabuk oluşturur, sınırlarını ayarlar ve sonra çıkar (böylece görebildiğim kadarıyla gerçek bir etkisi olmaz).
12288'i aşmak için, çekirdeği kern.maxfilesve kern.maxfilesperprocparametreleri ve ayrıca (en azından bu tartışmanın bir özeti olan bu blog girişine göre ) bir fırlatma limitini ayarlamanız gerekir. Bunların tümünü bir kerede ayarlamak için kullanabilirsiniz :launchctl limit

sudo launchctl limit maxfiles 1000000 1000000

Bunu kalıcı hale getirmek için (yani, yeniden başlattığınızda sıfırlanmadı), aşağıdakileri /etc/launchd.confiçeren oluşturun :

limit maxfiles 1000000 1000000

Sonra kullanabilirsiniz ulimit(ancak olmadan sudosizin süreç sınırını ayarlamak için).

Bu işe yaramazsa, çekirdekte boyut sınırlarıyla karşılaşıyor olabilirsiniz. Eğer modeliniz destekliyorsa önyükleme, içinde çekirdek 64 bit modunda yardımcı olabilir.


1
sudo launchctl limit maxfiles 1000000 unlimited"Maksimum dosyalar" için zor veya yumuşak sınır sınırsız olamaz. Lütfen her ikisi için de sayısal bir parametre kullanın.
Thomas Hunter

2
Bu satırı eklerken dikkatli olun launchd.conf. Bence sayı çok küçükse, bilgisayarınızı kullanılamaz hale getirebilir. Mesela, kullandım limit maxfiles 1024 1024ve geri değiştirmek için çok zor bir zaman geçirdim.
Shawn

1
Ne yazık ki: "/etc/launchd.conf dosyasına, alt komutların erken önyükleme süresi boyunca çalışması için artık danışılmıyor; bu işlevsellik güvenlik nedeniyle kaldırıldı."
Alice Purcell

Çalışmıyor, ulimit -Sn 10240'ı başarılı bir şekilde ayarlasam bile fd numaram 6k'yi aşamaz.
Jian Weihang

@JianWeihang fd numaraları işlem başınadır, bu yüzden diğer dosyaların 4000 dosyanın açık olduğunu sanıyorum. Chrome'u çalıştırdınız mı? ;)
Trejkaz

41

Aşağıdakiler çoğu çözümü çözmelidir (ve hiyerarşilerine göre sıralanır):

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.

3
Ne yazık ki: "/etc/launchd.conf dosyasına, alt komutların erken önyükleme süresi boyunca çalışması için artık danışılmıyor; bu işlevsellik güvenlik nedeniyle kaldırıldı."
Alice Purcell

34

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

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

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

<?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

2
Bu cevap harika ve buraya eklemek için bazı bilgiler buldum, @ ninjaPixel: blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan
Dean Radcliffe 18

20

Görünüşe göre OS X Lion bir değer olarak “sınırsız” a izin vermiyor:

% sudo launchctl limit maxfiles 8192 unlimited
Neither the hard nor soft limit for "maxfiles" can be unlimited. Please use a numeric parameter for both.

Hem yumuşak hem de sabit limit için sayısal değerler sağlamak işi yapar:

% sudo launchctl limit maxfiles 4096 8192

3
Değerlerden biri sınırsız ise , -1değer olarak kullanmak 12288. Örneğin daha büyük sayısal değerler kullanmak mümkündür sudo launchctl limit maxfiles 15000 150000. O zaman bu ayarların bir etkisi olduğundan emin değilim.
Daniel Beck

8

Mavericks'te basittir. Düzenli bir kullanıcı olarak:

ulimit -n 8192

Güncellenen ayarları

ulimit -a

Benim makinede:

ulimit -a
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-v: address space (kbytes)          unlimited
-l: locked-in-memory size (kbytes)  unlimited
-u: processes                       709
-n: file descriptors                8192

2
Çözümünüzü gözden geçirmeyi düşünün. 1024 ulimit ayarlayıp çıkış dosyası tanımlayıcılarını 8192 olarak gösteriyorsunuz (1024 olmalı). Sen yaklaşmak, sudo olmadan da probelmatik, sen kendin için birkaç kez değiştirmeyi dene.
y3sh

1
sudo burada kullanılmamalıdır, ancak bu cevap yanlıştır. Mavericks kullanıcıları kullanmalı echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.confve makinelerini yeniden başlatmalı
Kyle Chadha

3

On OS X 10.13.6 bu benim için çalışıyor:

$ sysctl kern.maxfiles
kern.maxfiles: 12288
$ sysctl kern.maxfilesperproc
kern.maxfilesperproc: 10240
$ sudo sysctl -w kern.maxfiles=1048600
kern.maxfiles: 12288 -> 1048600
$ sudo sysctl -w kern.maxfilesperproc=1048576
kern.maxfilesperproc: 10240 -> 1048576
$ ulimit -S -n
256
$ ulimit -S -n 1048576
$ ulimit -S -n
1048576

1

Bazı sınırlar değiştirilemez ulimit, çünkü bunlar yalnızca geçerli kabuk için geçerlidir, bu nedenle launchctlsınırları genel olarak değiştirmek için komut kullanılmalıdır.

sudo launchctl limit maxfiles 100000 unlimited

Lütfen bu limitleri /etc/launchd.conf(diğer cevaplarda önerildiği gibi) uygulamanın son macOS sürümlerinde desteklenmediğini unutmayın. Bununla birlikte, burada , orada ve orada önerilen kullanıcı başına veya sistem genelinde yapılandırma dosyaları gibi hala kullanabilirsiniz launchd.plist(bkz :) .man launchd.plistplist


Bu limitleri kalıcı hale getirmek için /etc/sysctl.confdosyayı kullanabilir ve örneğin:

kern.maxprocperuid=1000
kern.maxproc=2000
kern.maxfilesperproc=20000
kern.maxfiles=50000

Değişikliklerin etkili olması için yeniden başlatılması gerekiyor.

Mevcut limitleri görmek için, şunu çalıştırın: launchctl limitveya sysctl -a | grep ^kern.max.

Ayrıca bakınız: MacOS'ta ulimit ayarlarına nasıl devam 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.