执行brew update出现too many open files错误,现有解决方案均无效
我明白这种常规方案都失效的感觉有多糟——你已经试过调-n到256、杀掉高FD占用进程,甚至搜遍谷歌和SO都没解决,那咱们得往更深的地方挖:
先确认限制是不是真的改到位了:
别只看终端的软限制,用ulimit -Hn看看硬限制,如果硬限制比256还低,那你改软限制根本没用。另外系统全局的限制也得查:sysctl kern.maxfiles和sysctl kern.maxfilesperproc,要是这俩值太低,就算用户级限制调上去也白搭。揪出到底是谁在占着FD:
别光笼统杀进程,用lsof -p <你的进程PID>精准看目标进程打开了啥——是文件?套接字?还是管道?如果是长期运行的程序,隔半小时跑一次lsof对比,就能发现是不是有资源泄漏(比如打开了就没关的文件/连接)。聚焦SSH场景的特殊情况:
你是在SSH终端里遇到的问题,说不定是SSH本身的FD泄漏?比如开了X11转发、Agent转发,或者挂了一堆远程端口转发没清?用lsof -c ssh看看SSH进程的FD列表,说不定能发现异常。别忽略应用层的锅:
有时候不是系统限制的问题,是你跑的脚本/服务本身有bug——比如循环打开文件却不close,或者网络连接用完了没断开。这种情况得检查代码逻辑,尤其是涉及文件IO、网络操作的部分。
提个醒:你之前改
-n如果只是临时用ulimit -n 256,那终端重启就会失效,要永久生效得改配置文件——比如Zsh用户改.zshrc,Bash改.bashrc,系统级的话改/etc/launchd.conf(macOS下)。
内容的提问来源于stack exchange,提问作者user_pruser

