Macで最大システムリソース消費を持続的に制御する方法


85

Mavericks以前は、/etc/launchd.confファイルを使用してシステムリソースの最大消費量を変更できました。たとえば、

limit maxfiles 16384 unlimited
limit maxproc 16384 unlimited

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

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


あなたの制限はOS Xの最大値を超えています。maxfilesは10240で終了し、maxprocの制限は1064です。今...
ジョーイT

@atmosx:/etc/sysctl.confではなく、する必要があり/etc/sysctrl.confます。
シウチンポン

1
@JoeyT:実際には、より高い制限に設定できます!ただし、Mac OS X 10.8(Mountain Lion)または10.9(Mavericks)を使用している場合は、最初に「App Store」から「OS X Server」を購入する必要があります。(はい、設定を変更するにはUSD $ 19.99を支払う必要があります!)要するに、sudo serverinfo --setperfmode trueマシンを「サーバーパフォーマンスモード」にするために1回実行する必要があります。次に、マシンの構成に応じて、「最大値が高くなります」。で私の記事を参照してくださいdiscussions.apple.com/thread/5166397詳細については。10.10(Yosemite)の場合、モードはデフォルトでオンになっています(少なくとも私のマシンでは!)。以下の私の答えをご覧ください。
シウチンポン

回答:


87

シェルセッションの制限

を介して設定される制限ulimitは、現在のシェルセッションによって作成されたプロセスにのみ影響します。

  • 「ソフト制限」は、実際に使用される制限です。「ハード制限」を超えない範囲で設定できます。
  • 「ハード制限」も設定できますが、これは現在の値よりも小さい値にのみ設定でき、「ソフト制限」以上の値に設定できます。
  • 「ハード制限」とシステム全体の制限は、rootシステム管理者がシステム構成コマンドを実行するか、システム構成ファイルを変更することで引き上げることができます。

あなたは、シェルセッションを終了した後(でCtrl+ Dexitまたは閉じTerminal.app窓など)、設定がなくなっています。次のシェルセッションで同じ設定が必要な場合は、シェル起動スクリプトに設定を追加します。

注:を使用している場合はbash~/.bash_proileまたはである必要があります~/.bash_login。他のシェルを使用している場合は、おそらくである必要があります~/.profile

システム制限(有効にするには再起動が必要です)

10.9(Mavericks)、10.10(Yosemite)、10.11(El Capitan)、および10.12(Sierra)の場合:

/Library/LaunchDaemons/limit.maxfiles.plist(所有者:root:wheel、モード:)でファイルを作成する必要があります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>

必要に応じて番号を変更する必要があります。それらはそれぞれ「ソフト制限」(262144)および「ハード制限」(524288)です。詳細については、を実行してマニュアルページを参照してくださいman launchd.plist

10.8(Mountain Lion)の場合:

次の行を/etc/sysctl.conf(所有者:root:wheel、モード:)に追加できます0644

kern.maxfiles=524288
kern.maxfilesperproc=262144

必要に応じて番号を変更する必要があります。これらは、それぞれ「システム全体の制限」(kern.maxfiles)および「プロセスごとの制限」(kern.maxfilesperproc)です。その他の設定については、を実行してマニュアルページを参照するman sysctlか、でソースコードを読んでください/usr/include/sys/sysctl.h

古いMac OS Xの場合(10.7(Lion)以前で動作すると思います):

次の行を/etc/launchd.conf(所有者:root:wheel、モード:)に追加できます0644

limit maxfiles 262144 524288

必要に応じて番号を変更する必要があります。それらはそれぞれ「ソフト制限」(262144)および「ハード制限」(524288)です。

システムで特定の値を超える制限を設定できない場合...

システムでは、「ハード最大値」(Appleが提案)よりも高い値を設定することはできません。この「ハード最大値」を増やすには、「App Store」から「OS X Server」を購入してから、次のコマンドを1回実行する必要があります。

sudo serverinfo --setperfmode true

これにより、マシンの「サーバーパフォーマンスモード」がアクティブになります。その後、マシンの構成に従って最大値を設定できます(これを参照)。以前にこれを試してみました(MountainとMavericksで)と動作します!詳細については、私の投稿(こちら)をご覧ください。

参照資料


1
ありがとうございました; 私はYosemiteを使用していますが、LaunchDaemonのplistテクニックが役に立ちました。私はそれが唯一のものだと信じています。これが必要な場合は、再起動する必要があることに注意しください。
nc。

1
@nc。:回答に「再起動が必要」を追加しました。私はこの分野で長く働いているので、それを知らない人がいることを知りませんでした。思い出してくれてありがとう!
シューチンポン

2
私は10.9.5を使用していますが、/etc/launchd.conf実行すると効果のみが表示されますulimit -n。これが重要な場合、誰かが指示を更新できますか?
Sridhar Sarnobat

1
10.10 Yosemiteメソッドは、10.11 El Capitanでも機能します。「無制限」に設定することはできませんでしたが、非常に高い数を使用しなければなりませんでした
15年

1
@aolszowka:経由でその制限を増やす方法については、この参照してください/etc/sysctl.confsuperuser.com/questions/827984/...
ロブ・ヨハンセン

11

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


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


編集1
私はそれから始める必要がありlaunchd ますマニュアルページ は次のファイルを参照します:

  ~/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はそのようなタスクを支援するために設計されています。無料でないものはLingonです。他の無料製品が存在する可能性があります。


私の投稿にはたくさんの情報があるので、どれが良いのか教えていただけますか?
Kiwy 14年

以下の私の答えをご覧ください。
ハワード

両方/etc/launchd.confとは、/etc/rc.local10.10のlaunchdに再設計されたとSystemStarterが削除されたため、10.10以降では無視されます。
ニセタマ

何か新しいものは、Mac OSの最新バージョンにアップしてきた場合、私のanswe'rを更新すること自由に感じ@nise
Kiwy

10

私はこれらの2行を.bash_profile
作品に魅力のように追加しました

ulimit -n 1024
ulimit -u 1024

2
システムの制限には影響しません。
-not2savvy

1
ただし、システムの制限が十分に高い場合は問題ないかもしれません。それらが何であるかを確認するには、単に実行しulimit -n -Hます。macOS High Sierraではunlimited、ユーザーの「ソフト」制限を変更する.bash_profileことでトリックが行われました。
ジョシュアピンター

9

システム制限

制限を変更していない/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ファイルは、(ユーザごとまたはシステム全体のエージェントフォルダに置くことができますLaunchAgents)。詳細についてはman launchd、およびman launchd.plist、またはこれまたはその回答を参照してください。

カーネルの制限

上記の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.

1
maxprocデフォルトでは、そのパラメーターのハードカーネル制限は1064 であるため、特に注意してください。つまり、2000に設定するか、「無制限」に設定すると、実際には1064に設定されるだけmaxprocperuid < maxprocです。システムmaxprocperuid=2000maxproc=1064危険です。詳細はこちらをご覧ください
Old Pro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.