web-dev-qa-db-ja.com

Macでシステムリソースの最大消費量を永続的に制御する方法は?

マーベリックスの前は、/etc/launchd.confファイル。システムリソースの最大消費量を変更します。次に例を示します。

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

Mavericksでは動作しなくなりました。

OS Xの最新バージョンでそれを行う正しい方法は何ですか?

85
Howard

ファイル/etc/launchd.confを作成し、その中にコマンドを入れるとうまくいくようです。


機能しない場合は、おそらく/etc/rc.localファイルを編集または作成して、その中にコマンドを追加できます。Appleは、コマンドの制限のサポートを削除する可能性がほとんどないためです。ライン。


編集1
それから始めるべきです、launchdman page 次のファイルを参照してください:

  ~/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.

私の賭けは、コマンドを~/Library/LaunchAgentsまたは/Library/LaunchDaemonsのどちらかに置く必要があるということです。
両方を試す必要があります。

編集2
launchdにはスクリプトだけでなくxmlファイルが必要であることにも注意してください。 GUIはそのようなタスクを支援するために設計されています自由ではありません1つは Lingon です。多分他の無料の製品が存在します。

11
Kiwy

これらの2行を.bash_profileに追加しました
魅力のように機能します

ulimit -n 1024
ulimit -u 1024
9
pixelass

システム制限

/etc/launchd.conf または/etc/rc.localでの制限の変更は、最近のmacOSではサポートされなくなりました。参照: 古いシステムとテクノロジー

代わりに、新しい起動エージェントを作成する必要があります。

以下は、PlistBuddyコマンドを使用したコマンドの例です(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"

maxprocの制限についても同様です:

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"

上記のファイルをロードするには、Sudo launchctl load /Library/LaunchAgents/com.launchd.*.plistを実行します。

ノート:

  • ファイルを印刷するには、catまたはPlistBuddy -x -c Print /Library/LaunchAgents/com.launchd.maxfiles.plistを実行します。
  • ロード中にエラーがないかログを確認するには、tail -f /var/log/system.logを実行します。
  • 現在のlaunchdの制限を確認するには、launchctl limitを実行します。
  • .plist file は、ユーザーごとまたはシステム全体のエージェントフォルダー(LaunchAgents)に配置できます。詳細については、man launchdおよび man launchd.plist 、または this または that の回答を参照してください。

カーネルの制限

上記の Launchd システム制限はカーネルによって制限されているため、カーネル状態変数で設定されている実際の制限よりも高く設定することはできません(ヘルプ:man sysctlを参照)。

現在のカーネル制限を確認するには、sysctl -a | grep ^kern.maxを実行します。

maxfiles制限を増やすには、Sudo sysctl -w kern.maxfiles=20480を実行します。

それらを永続化するには、同様の方法を使用して、スタートアップ.plistファイルを作成します。

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"

シェル制限

シェル制限については、関連するulimitコマンドを、個々のユーザーの場合は~/.bashrcまたは~/.bash_profileスタートアップファイルに、すべてのユーザーの場合は/etc/bashrcに追加します。参照: Macで永続的なシェルのulimit設定を追加する方法

追加する推奨行:

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

ulimit(単一のプロセスが開くことができるファイル数の弱い制限)に達している単一のプログラムがある場合、ulimitをより大きな数に調整すると、特に.bash_profileulimitコマンドを置くだけです。さらに、いくつかの理由により、/etc/launchd.conf/etc/sysctl.confなどのファイルを編集したり、/Library/LaunchDaemons/の下にplistファイルを追加したりしないことを強くお勧めします。

  • これらのファイルへの変更はバックアップに残り、アップグレードすると、macOSの新しいバージョンと新しいコンピューターに引き継がれます。

  • これらの変更が問題を引き起こす場合(これは実際の可能性です)、変更を加えたこと、および変更内容を覚えてから、ファイルを再編集して元に戻します。これは数年後に起こります。

  • 数年のアップグレードの後、以前は制限の増加であったものが現在は制限の減少であることに気付くかもしれません。ただし、(a)変更を行ったことを覚えておらず、(b)最初からオーバーロードしたために新しい制限を確認できないため、おそらくそれはわかりません。

はるかに優れたオプション

一般に、システムの個々のパラメーターを調整してシステムのバランスを崩す(および単一のプログラムがすべてのリソースを占有することによってシステムをクラッシュさせる可能性がある)のではなく、デフォルトのシステム制限がニーズに不十分である場合は、調整することをお勧めします「サーバーパフォーマンスモード」、または少なくとも試してみてください。これに必要なのは、OS X/macOS 10.8 Mountain Lion以降で、少なくとも16 GiB搭載されているメモリです。早い段階でこれを支払う必要がありましたが、OS X 10.8 Mountain Lion以降、それは標準OSでは 無料で、Appleによって公式にサポートされています です。

このモードをオンにすると、システムの制限、特に実行できるプロセスの数と開くことができるファイルの数が劇的に増加しますが、システムカーネルにより多くのメモリが割り当てられます。サーバーパフォーマンスモードによって何が変更されるかについては、質問の回答 "serverperfmode = 1がmacOSで実際に何をするのか?" を参照してください。

このモードには、他の回答で提案されているように、構成ファイルを編集するよりもいくつかの利点があります。

  • これは単一のパラメーターの変更であり、簡単に元に戻すことができます。
  • その結果、バランスのとれた上限のセットが得られ、不正なプロセスがシステムをクラッシュさせることに対する保護手段が維持されます。
  • ほとんどの場合、構成ファイルを編集する場合でも、カーネルが許可するよりも高い制限が提供されます。
  • 追加の構成変更なしで、すべてのプロセスのデフォルトの制限が引き上げられます。
  • OS X 10.11 El Capitan以降、構成の変更はNVRAMに保存されます。つまり、問題が発生している場合は、NVRAMをリセットするトラブルシューティング手順を実行すると、通常モードに戻ります。覚えておく必要はありません。
  • これはNVRAMにあるため、バックアップから復元するときに誤って状態を変更することはありません。
  • これはNVRAMにあるため、Macセットアップを新しいハードウェアに複製しても、自動的には起動しません。
  • これはAppleによって正式にサポートされているため、「動作するだけ」であり、Apple Geniusesから、サポートを依頼したときにシステムを不適切に変更したという苦情はありません。
  • これは単一のパラメーターの変更であるため、トラブルシューティングや1つの設定と他の設定との比較のために簡単にオンとオフを切り替えることができます。

サーバーパフォーマンスモードをオンまたはオフにする

サーバーパフォーマンスモードをオンにするには、ターミナルを使用して次のコマンドのいずれかを実行し、再起動して有効にします。

  • OS X 10.11 El Capitan以降の場合は、
Sudo nvram boot-args="serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"

そしてそれをオフにします

Sudo nvram boot-args="$(nvram boot-args 2>/dev/null | sed -e $'s/boot-args\t//;s/serverperfmode=1//')"

上記のコマンドは、Appleが公式に推奨するものですが、実際にはそれらに問題があります。つまり、「オンにする」コマンドを2回実行すると、「オフにする」コマンドを実行する必要があります。 "コマンドを2回実行してオフにします。実行して変更を加えた後、オンかオフかを確認してください

nvram boot-args

出力に「serverperfmode = 1」が含まれている場合は設定がオンになり、含まれていない場合は設定がオフになります。

  • OS X 10.8 Mountain Lion、OS X 10.9 Mavericks、およびOS X 10.10 Yosemiteの場合は、サーバーパフォーマンスモードをオンにします。
serverinfo --setperfmode 1

そしてそれをオフにします

serverinfo --setperfmode 0

設定を確認してください

serverinfo --perfmode

この設定は、システムを再起動するまで有効になりません。

コンピューターが現在サーバーパフォーマンスモードで実行されているかどうかを確認する

設定を確認すると、再起動後に有効になるように設定されているかどうかがわかります。現在アクティブであるかどうかをテストするには(私のアドバイスに従っていて、設定を変更する構成ファイルを編集していない場合)、次のコマンドを実行します。

sysctl kern.maxproc

システムが許可するプロセスの最大数である数値が表示されます。その数が 532の倍数 の場合、サーバーパフォーマンスモードはオフです。ラウンド数(2500の倍数)の場合、現在実行中のシステムでサーバーパフォーマンスモードがオンになります。

0
Old Pro