Mac'te maksimum sistem kaynağı tüketimi nasıl sürekli kontrol edilir?


85

Mavericks'ten önce, /etc/launchd.confmaksimum sistem kaynak tüketimini değiştirmek için dosya kullanabilirdim , örneğin:

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

Artık Mavericks'te çalışmıyor.

OS X'in son sürümünde bunu yapmanın doğru yolu nedir?


Limitleriniz OS X için maksimumun üzerindedir. Maxfiles 10240'da en üst seviyeye çıkar ve maxproc limit 1064'dür. Onaylanan cevap limitleri koyarsa, onu bir başparmak veririm .. ama orada yanlış oturuyor ve iyi bir yıl boyunca düzeltilmemiş şimdi ..
Joey T

@atmosx: Olması gereken /etc/sysctl.confdeğil /etc/sysctrl.conf.
Siu Ching Pong -Asuka Kenji- 15

1
@JoeyT: Aslında daha yüksek bir limit ayarlayabilirsiniz! Ancak, Mac OS X 10.8 (Mountain Lion) veya 10.9 (Mavericks) kullanıyorsanız, ilk önce "App Store" dan "OS X Server" satın almanız gerekir. (Evet, bir ayarı değiştirmek için 19.99 USD ödemeniz gerekiyor!) Kısaca, sudo serverinfo --setperfmode truemakinenizi "Sunucu Performansı Modu" na sokmak için bir kez koşmanız gerekiyor. Ardından, makine yapılandırmanıza bağlı olarak "daha yüksek bir maksimum" değeriniz vardır. Lütfen ayrıntılar için tartışmalara bakın. 10.10 (Yosemite) için, mod varsayılan olarak açıktır (en azından makinemde!). Aşağıdaki cevaba bakınız.
Siu Ching Pong -Asuka Kenji- 15

Yanıtlar:


87

Kabuk Oturum Sınırı

Ayarlanan sınırlar ulimityalnızca geçerli kabuk oturumu tarafından oluşturulan işlemleri etkiler.

  • "Yumuşak limit" kullanılan gerçek limit. "Zorlu limit" den daha büyük olmadığı sürece ayarlanabilir.
  • "Sert limit" ayrıca geçerli değerden daha düşük bir değere ve sadece "yumuşak limit" den daha düşük olmayan bir değere ayarlanabilir.
  • rootSistem konfigürasyon komutlarını yürüterek veya sistem konfigürasyon dosyalarını değiştirerek sistem çapında limitlerin yanı sıra "zor limit" yükseltilebilir (yönetici).

Eğer kabuk oturumunu sonlandırmak sonra (tarafından Ctrl+ D, exitveya kapanış Terminal.apppencere, vb), ayarlar gitti. Aynı ayarı bir sonraki kabuk oturumunda da istiyorsanız, ayarı kabuk başlangıç ​​komut dosyasına ekleyin.

NOT: Kullanıyorsanız bash, ~/.bash_proileveya olmalıdır ~/.bash_login. Başka mermiler kullanıyorsanız, muhtemelen olması gerekir ~/.profile.

Sistem Sınırı (Etkili Olması için Yeniden Başlatma Gerektirir)

10.9 (Mavericks), 10.10 (Yosemite), 10.11 (El Capitan) ve 10.12 (Sierra) için:

Adresinde bir dosya oluşturmanız gerekir /Library/LaunchDaemons/limit.maxfiles.plist(sahip:, root:wheelmod:) 0644:

<?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>262144</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

Sayıları ihtiyacınıza göre değiştirmelisiniz. Bunlar "yumuşak sınır" ( 262144) ve 524288sırasıyla "zor sınır" ( ). Daha fazla bilgi için çalıştırarak kılavuz sayfasına bakın man launchd.plist.

10.8 (Dağ Aslanı) için:

Aşağıdaki satırları /etc/sysctl.conf(sahip:, root:wheelmod :) için ekleyebilirsiniz 0644:

kern.maxfiles=524288
kern.maxfilesperproc=262144

Sayıları ihtiyacınıza göre değiştirmelisiniz. Sırasıyla "sistem genelindeki limit" ( kern.maxfiles) ve "işlem başına limit" ( kern.maxfilesperproc). Daha fazla ayar için, elle çalıştırma sayfasını man sysctlokuyun veya kaynak kodunu okuyun /usr/include/sys/sysctl.h.

Daha eski Mac OS X için (Sanırım 10.7'de (Lion) veya öncesinde çalışıyor):

Aşağıdaki satırı ekleyebilirsiniz /etc/launchd.conf(sahip:, root:wheelmod:) 0644:

limit maxfiles 262144 524288

Sayıları ihtiyacınıza göre değiştirmelisiniz. Bunlar "yumuşak sınır" ( 262144) ve 524288sırasıyla "zor sınır" ( ).

Sistem, sınırları belirli bir değerin üstüne koymanıza izin vermiyorsa ...

Sistem "Apple tarafından önerilen" bir "maksimum" değerden daha yüksek bir değer belirlemenize izin vermez. Bu "en fazla" değeri artırmak için, "OS X Sunucusu" nu "Uygulama Mağazası" ndan satın almanız ve ardından aşağıdaki komutu bir kez uygulamanız gerekir:

sudo serverinfo --setperfmode true

Bu, makinenizdeki "sunucu performansı modunu" etkinleştirir. Daha sonra maksimum ayarını makinenizin yapılandırmasına göre ayarlayabilirsiniz (buna bakın) . Bunu daha önce denedim (Mountain ve Mavericks'te) ve işe yarıyor! Lütfen daha fazla bilgi için gönderimime ( buraya ) bakın.

Referanslar


1
Teşekkür ederim; Yosemite kullanıyorum ve LaunchDaemon pist tekniği benim için çalıştı. Sanırım bunu yapan tek kişi. Buna ihtiyacı olan herkes için, etkinleşmesi için yeniden başlatmanın gerekli olduğunu lütfen unutmayın .
nc.

1
@nc. : Cevabıma "Etkili Olması için Yeniden Başlatma Gerekiyor" eklendi. Bu alanda çok uzun zamandır çalışıyorum, bu yüzden bazı insanların bunu bilmediğinin farkında değildim. Hatırlattığın için teşekkürler!
Siu Ching Pong -Asuka Kenji -

2
10.9.5 kullanıyorum ancak çalıştırdığımda yalnızca /etc/launchd.confyaklaşımın etkisi gösteriliyor ulimit -n. Bu önemliyse, birisi talimatları güncelleyebilir mi?
Sridhar Sarnobat

1
10.10 Yosemite yöntemi ayrıca 10.11 El Capitan'da çalışır. Bunu ayarlamak olamazdı rağmen ben sadece gerçekten yüksek bir sayı kullanmak zorunda kaldı "sınırsız" olarak
antriver

1
@aolszowka: Bu limiti nasıl artıracağınızı görmek için şuna bakın /etc/sysctl.conf: superuser.com/questions/827984/…
Rob Johansen

11

Dosyayı oluşturmak /etc/launchd.confve komutunuzu içine koymak hile yapmak gerekir gibi görünüyor .


Eğer işe yaramazsa, büyük olasılıkla /etc/rc.localdosyayı düzenleyebilir veya oluşturabilir ve içine komutunuzu ekleyebilirsiniz; çünkü Apple'ın komut satırındaki limit desteğini silme olasılığı çok düşüktür.


Düzenleme 1 :
Bununla başlamalıydım, launchd man sayfası aşağıdaki dosyalara başvuruyor:

  ~/Library/LaunchAgents         Per-user agents provided by the user.
  /Library/LaunchAgents          Per-user agents provided by the administrator.
  /Library/LaunchDaemons         System-wide daemons provided by the administrator.
  /System/Library/LaunchAgents   Per-user agents provided by Mac OS X.
  /System/Library/LaunchDaemons  System-wide daemons provided by Mac OS X.

Bahse girerim şimdi ya da komutu koymak gerektiğidir ~/Library/LaunchAgentsveya /Library/LaunchDaemons.
İkisini de denemelisin.

Düzenleme 2 :
Ayrıca, başlatılan dosyanın yalnızca komut dosyalarına değil xml dosyasına ihtiyaç duyduğunu unutmayın. Bir gui, bu görevde özgür olmayan birinin Lingon olduğunu söylemeye yardımcı olmuştur . Belki başka ücretsiz ürünler var.


Yazımda çok fazla bilgi olduğu için hangisinin iyi olduğunu söyleyebilir misiniz?
Kiwy

cevabımı aşağıya bakınız.
Howard,

Hem /etc/launchd.confve /etc/rc.local10.10 Launchd yeniden tasarlandı ve SystemStarter kaldırıldı beri, daha sonra 10.10 de dikkate alınmaz ve.
nisetama,

@nise Mac OS'nin son sürümünde yeni bir şey çıktığında answe'r'imi güncellemek için çekinmeyin
Kiwy

10

Bu iki çizgiyi .bash_profile
eserlerime cazibe gibi ekledim.

ulimit -n 1024
ulimit -u 1024

2
Sistem sınırlarını etkilemez.
not2savvy

1
Ancak, sistem sınırlarınız yeterince yüksekse, bu tamam olabilir. Ne olduklarını kontrol etmek için sadece koşabilirsiniz ulimit -n -H. MacOS High Sierra'da hile unlimitedyapan kullanıcının "yumuşak" limitini değiştiriyordu .bash_profile.
Joshua Pinter

9

Sistem sınırları

Son macOS için /etc/launchd.confveya içindeki limitleri değiştirmek /etc/rc.localartık desteklenmiyor. Bakınız: Eski Sistemler ve Teknoloji .

Bunun yerine, yeni bir başlatma aracı oluşturmanız gerekir .

İşte komutu kullanarak komut örneği PlistBuddy(bkz:) man PlistBuddy:

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxfiles.plist \
-c "add Label string com.launchd.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxfiles" \
-c "add ProgramArguments: string 10240" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

Ve maxproclimit için benzer :

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.launchd.maxproc.plist \
-c "add Label string com.launchd.maxproc" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string launchctl" \
-c "add ProgramArguments: string limit" \
-c "add ProgramArguments: string maxproc" \
-c "add ProgramArguments: string 2000" \
-c "add ProgramArguments: string unlimited" \
-c "add RunAtLoad bool true"

Yukarıdaki dosyaları yüklemek için çalıştırın: sudo launchctl load /Library/LaunchAgents/com.launchd.*.plist.

Notlar:

  • Dosyayı yazdırmak için şunu çalıştırın: catveya PlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plist.
  • Yükleme sırasında herhangi bir hata günlüğünü kontrol etmek çalıştırın: tail -f /var/log/system.log.
  • Geçerli görmek için launchdsınırları, çalıştırın: launchctl limit.
  • .plistDosya , kullanıcı başına ya da sistem genelinde madde klasör (yerleştirilebilir LaunchAgents). Bkz: man launchdve man launchd.plist, veya bu veya daha fazla ayrıntı için bu cevabı.

Çekirdek sınırları

Lütfen yukarıdaki Launchd sistem sınırlarının hala çekirdek tarafından sınırlandırıldığını unutmayın , bu yüzden bunları çekirdek durum değişkenlerinde ayarlanan gerçek sınırlardan daha yükseğe ayarlayamazsınız (bkz: man sysctlyardım için).

Geçerli çekirdek sınırlarını görmek için çalıştırın: sysctl -a | grep ^kern.max.

Artırmak için maxfilessınırı, çalıştırın: sudo sysctl -w kern.maxfiles=20480.

Bunları kalıcı kılmak için, başlangıç .plistdosyalarını oluşturmak üzere benzer yöntemi kullanın;

sudo /usr/libexec/PlistBuddy /Library/LaunchAgents/com.kern.maxfiles.plist \
-c "add Label string com.kern.maxfiles" \
-c "add ProgramArguments array" \
-c "add ProgramArguments: string sysctl" \
-c "add ProgramArguments: string -w" \
-c "add ProgramArguments: string kern.maxfiles=20480" \
-c "add RunAtLoad bool true"

Kabuk sınırları

Kabuk sınırları için, tek bir kullanıcı veya tüm kullanıcılar için ilgili ulimitkomutu ~/.bashrcveya ~/.bash_profilebaşlangıç ​​dosyasını ekleyin /etc/bashrc. Bkz: Mac'te kalıcı kabuk ulimit ayarları nasıl eklenir?

Eklenecek önerilen satırlar:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

1
Özellikle dikkatli olun maxprocvarsayılan olarak o parametreye sert çekirdek sınırı 2000 ayarlayarak ya aslında sadece Maalesef çekirdek o zorlamaz 1064 olarak ayarlar "sınırsız" anlamına gelen 1064 olduğu için maxprocperuid < maxprocve ayarları bırakacaktır önermek ile maxprocperuid=2000ve maxproc=1064tehlikeli olan sistem . Bununla ilgili daha fazla bilgiyi burada bulabilirsiniz .
eski Pro
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.