題 增加Snow Leopard中打開文件描述符的最大數量?


我正在嘗試做一些需要大量文件描述符的事情

sudo ulimit -n 12288 和Snow Leopard一樣高;超出此結果

/ usr / bin / ulimit:第4行:ulimit:打開文件:無法修改限制:參數無效。

我想把數字提高得多,比如說10萬。有可能嗎?


96
2018-06-27 10:56


起源


這個問題的答案不再適用於OSX Mavericks。 - Howard
運行 echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf 並重新啟動適用於我在小牛隊。 - user495470


答案:


運用 ulimit 命令僅更改當前shell及其子項的資源限制 sudo ulimit 創建一個根shell,調整其限制,然後退出(因此,據我所知,沒有真正的效果)。
要超過12288,您需要調整內核 kern.maxfiles 和 kern.maxfilesperproc 參數,也(至少根據 這篇博客文章,這是一個總結 這個討論)一個發射限制。您可以使用 launchctl limit 立即調整所有這些:

sudo launchctl limit maxfiles 1000000 1000000

要使其永久化(即重啟時不重置),請創建 /etc/launchd.conf 含:

limit maxfiles 1000000 1000000

然後 您可以使用 ulimit (但沒有 sudo)調整您的過程限制。

如果不這樣做,您可能會遇到內核中的大小限制。如果 你的模型支持它,啟動內核 64位模式 可能有幫助。


90
2018-06-27 21:17



sudo launchctl limit maxfiles 1000000 unlimited “maxfiles”的硬限制和軟限制都不能無限制。請為兩者使用數字參數。 - Thomas Hunter
添加該行時要小心 launchd.conf。我認為如果數量太小,它可能會使您的計算機無法使用。例如,我用過 limit maxfiles 1024 1024 我很難改回來。 - Shawn
唉:“在早期啟動時,子命令不再需要參考/etc/launchd.conf文件;出於安全考慮,此功能已被刪除。” - Alice Purcell
它不起作用,即使我成功設置了ulimit -Sn 10240,我的fd數也不能超過6k。 - Jian Weihang
@JianWeihang fd編號是每個進程所以我假設其他進程碰巧有4000個文件打開。你碰巧運行Chrome嗎? ;) - Trejkaz


以下應解決大多數解決方案(並按其層次結構的順序列出):

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

筆記:

  1. 您需要重新啟動才能使這些更改生效。
  2. AFAIK你不能再在OS X下設置'無限'的限制
  3. launchctl maxfiles受sysctl maxfiles限制,並且 因此不能超過它們
  4. sysctl似乎從launchctl繼承了kern.maxfilesperproc MAXFILES
  5. ulimit似乎繼承了它的'open files'值 默認情況下是launchctl
  6. 您可以在/ etc / profile中設置自定義ulimit,或者 〜/ .profile;雖然這不是必需的,但我提供了一個例子
  7. 將這些值中的任何一個設置為非常高的數字與其默認值相比時要小心 - 這些功能存在穩定性/安全性。我已經把這些我認為合理的示例數字寫在其他網站上。

41
2017-12-03 12:07



唉:“在早期啟動時,子命令不再需要參考/etc/launchd.conf文件;出於安全考慮,此功能已被刪除。” - Alice Purcell


似乎有一種完全不同的方法來更改每個OS X版本的打開文件限制!

對於OS X Sierra (10.12.X)你需要:

1。 在 Library/LaunchDaemons 創建一個名為的文件 limit.maxfiles.plist 並粘貼以下內容(隨意更改兩個數字(分別是軟限制和硬限制):

<?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。 更改新文件的所有者:

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

3。 加載這些新設置:

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

4。 最後,檢查限制是否正確:

launchctl limit maxfiles

28
2018-01-24 14:50



這個答案很棒,我在這裡找到了一些背景知識,@ ninjaPixel: blog.dekstroza.io/ulimit-shenanigans-on-osx-el-capitan - Dean Radcliffe


似乎OS X Lion不允許“無限制”作為值:

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

提供軟限制和硬限制的數值可以完成以下工作:

% sudo launchctl limit maxfiles 4096 8192

20
2017-12-10 10:11



如果其中一個值是 無限,使用 -1 因為價值導致 12288。可以使用更大的數值,例如 sudo launchctl limit maxfiles 15000 150000。不過,我不確定這些設置是否有效。 - Daniel Beck♦


對小牛隊來說很簡單。作為普通用戶:

ulimit -n 8192

您可以通過檢查更新的設置

ulimit -a

在我的機器上:

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

7
2017-09-04 15:44



考慮修改您的解決方案。您將ulimit設置為1024,然後將輸出文件描述符顯示為8192(應為1024)。你的方法也是沒有sudo的問題,嘗試自己改幾次。 - y3sh
sudo不應該在這裡使用,但這個答案是不正確的。小牛用戶應該使用 echo limit maxfiles 10000 10000|sudo tee -a /etc/launchd.conf 然後重啟他們的機器 - Kyle Chadha


有些限制無法改變 ulimit因為它們只適用於當前的shell launchctl命令應該用於全局更改限制,例如

sudo launchctl limit maxfiles 100000 unlimited

請注意,應用這些限制 /etc/launchd.conf (在其他答案中建議)在最近的macOS版本中不再受支持。雖然還可以使用 launchd.plist (看到: man launchd.plist)例如每用戶或系統範圍 plist 配置文件如建議的那樣 這裡 和 那裡


要使這些限制持久,您可以使用 /etc/sysctl.conf 文件並添加例如:

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

要使更改生效,需要重新啟動。

要查看當前限制,請運行: launchctl limit 要么 sysctl -a | grep ^kern.max

也可以看看: 如何在macOS中保留ulimit設置?


0
2017-07-29 13:27