我需要擺脫OS X 10.7.1中令人討厭的“系統中太多打開的文件”限制。
有辦法嗎?
我需要擺脫OS X 10.7.1中令人討厭的“系統中太多打開的文件”限制。
有辦法嗎?
根據 這篇有用的文章 (我建議閱讀):
默認情況下,設置Mac OS X可以打開的最大文件數 到12,288,給定進程可以打開的最大文件數是 10,240。
你可以用以下方法檢查這些
sysctl kern.maxfiles
sysctl kern.maxfilesperproc
您可以通過以下方式增加限制(風險自負):
sysctl -w kern.maxfiles=20480
(或您選擇的任何數字)sysctl -w kern.maxfilesperproc=18000
(或您選擇的任何數字)要使更改成為永久更改,請使用 sudo
把你的設置 /etc/sysctl.conf
(您可能需要創建),如下所示:
kern.maxfiles=20480
kern.maxfilesperproc=18000
注意:在OS X 10.10或更低版本中,您可以添加設置 /etc/launchd.conf
喜歡 limit maxfiles
它會覆蓋你放在這裡的任何東西。
再次,從文章:
完成此操作後,內核本身將具有最大數量 文件,但shell可能不會。而且因為大多數流程都需要 這個很多文件將由shell發起 要增加那個。
對此的命令是:
ulimit -S -n 2048 # or whatever number you choose
這種變化也是暫時的;它只持續當前的shell會話。您可以將其添加到shell配置文件中(.bashrc
, .zshrc
或者等等)如果你想在每次打開shell時運行它。
似乎有一種完全不同的方法來更改每個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
您需要增加ulimit設置 - 這些天在OS X上相當低 - 默認為256。加 ulimit -n 4096
或類似於你的〜/ .profile或同等物,它將在你的本地環境中解決它。跑 ulimit -a
檢查你目前的水平
要查看系統設置,請運行以下命令:
launchctl limit maxfiles
Lion(10240)在每個進程的基礎上設置得比以前高出很多。但是如果你仍然在那裡擊中它,那麼你可以使用具有所需級別的相同命令將其設置得更高。要使更改永久保留/etc/launchd.conf,您需要添加相關行。
其他選擇可能是找到罪魁禍首:
sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
對於最後一個,您可以看到哪些文件是打開的:
sudo lsof -n | grep socketfil
如果需要,可以殺死進程
kill $pid
來自評論:
對於它的價值,您還可以使用最開放的文件獲取進程ID列表
lsof -n | sed -E 's/^[^ ]+[ ]+([^ ]+).*$/\1/' | uniq -c | sort | tail
伙計們,小牛隊10.9.4
ulimit -n 2048
工作良好。您可能需要啟動新的登錄會話。
你可以跑
lsof -n
哪個進程打開了太多文件。
然後殺了它。
要么
sysctl -w kern.maxfiles=20480
把它改成更大的一個。
我在做一個chmod -R時遇到了它,所以我通過採取較小的步驟來解決它,例如
# for each directory
find . -type d -exec chmod 755 {} \;