有办法吗?
#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可能没有。并且由于大多数将占用大量文件的进程将由外壳启动,因此您要
增加该文件。
命令原因是:
ulimit -S -n 2048 # or whatever number you choose
更改也是暂时的;它仅在当前的shell会话中持续。如果希望每次打开外壳程序时都可以运行它,则可以将其添加到外壳程序配置文件(
.bashrc
,.zshrc
或其他内容)中。评论
单击启动区域中的图标启动的进程有什么限制?以及如何更改该限制?当您说“外壳”时,我假设您是指交互式终端外壳。
– Cheeso
2012年8月15日,0:48
创建一个/etc/launchd.conf文件,其内容限制为maxfiles 1000000 1000000对我来说非常有用! (此处为OSX 10.8.2)
–楚格沃尔特
2013年2月1日19:26
我将kern.maxfiles = 65000 kern.maxfilesperproc = 65000放在/etc/sysctl.conf中,然后重新启动。 kern.maxfiles被忽略并保留默认值,但kern.maxfilesperproc设置为65000。我没有/etc/launchd.conf,所以这是怎么回事?
– pferrel
2014年11月13日,0:47
我来这里至少每6个月左右找到一次此帖子!太棒了;)
– brandonscript
16年7月28日在1:46
如果有人遇到最大文件无法粘贴的问题,那是因为在maxfiles行之后有一个尾随空格,需要删除该空格。
– jjathman
16-10-14在16:27
#2 楼
似乎有一种完全不同的方法来更改每个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
评论
工作完美,谢谢!在我的情况下,该错误在Java进程中显示,并显示消息IO错误:错误的文件描述符(写入失败)
– agradl
17 Mar 22 '17 at 16:52
也适用于El Capitan 10.11.6
–特洛伊·丹尼尔斯(Troy Daniels)
17年4月17日在17:23
仍然无法更改shell的ulimit。无论我做什么,最大停留时间为1024
– DataGreed
17-10-6在0:46
在第2步中运行:sudo chmod 600 /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root /Library/LaunchDaemons/limit.maxfiles.plist
–海阮
18年6月21日在8:00
#3 楼
另一种选择可能是找到罪魁祸首:sudo lsof -n | cut -f1 -d' ' | uniq -c | sort | tail
对于最后一个,您可以看到打开了哪些文件:
sudo lsof -n | grep socketfil
如果需要的话可以终止该进程
kill $pid
评论中的内容:
还可以使用最大的打开文件获取进程ID列表,
lsof -n +c 0 | sed -E 's/^[^ ]+[ ]+([^ ]+).*$//' | uniq -c | sort | tail
评论
有帮助!但是在OS X(10.11)上排序不需要-h。 (也许是-g?)
–罗伯特·卡尔洪(Robert Calhoun)
17 Mar 3 '17 at 14:52
对我而言,即使没有-h(OS X 10.12.3),也能很好地工作:sudo lsof -n |切-f1 -d''| uniq -c |排序尾巴
–vearutop
17 Mar 6 '17 at 3:42
所以没有-h就可以了
– Sanmai
17 Mar 6 '17 at 10:27
使用lsof -n + c 0来防止截断进程名称。
–vaughan
18年7月12日在11:45
运行Catalina,我更喜欢lsof -n + c 0 | sed -E's / ^([^] + [] + [^] +)。* $ / \ 1 /'| uniq -c |排序尾(即,将第一个打开的括号移到更左以在输出中包括命令名称)。给我这个:```... 629 Google \ x20Chrome 50163 669 phpstorm 89615681 Microsoft \ x20Outlook 89373 808 vpnkit-bridge 755 1176 zoom.us 1382```在这里,zoom,PID 1382,有1176个打开的文件,最多现在我系统上的任何进程。
–约瑟夫·奇克(Joseph Cheek)
20 Jul 19'4:16
#4 楼
您将需要增加ulimit设置-这些天在OS X上非常低-默认为256。将ulimit -n 4096
或类似的内容添加到您的〜/ .profile或等效文件中,这将在您的本地环境中解决。运行ulimit -a
以检查您当前的水平要查看系统设置,请运行以下命令:
launchctl limit maxfiles
Lion中的设置较高(10240)比以前的每个过程都要高。但是,如果仍在此处击中它,则可以使用相同的命令将其设置为更高的水平。要使更改永久生效,需要在/etc/launchd.conf中添加相关行。
评论
256?对我来说,它是2560个文件描述符,但我从未更改过。限制为266个进程(c.f. ulimit -a)。
–slhck
2012年6月22日18:55
对我一样,在MacOS X Maverick上为256个文件
–攀登
2014年8月9日在6:44
在OS X Yosemite上也为256
–亚历山大
15年5月28日在9:52
El Capitan上的256。
– TMN
16年4月28日在10:53
优胜美地256。
– Jaec
16年6月16日在22:50
#5 楼
民间,在Mavericks 10.9.4ulimit -n 2048
上工作正常。您可能需要启动一个新的登录会话。#6 楼
对于最新的macOS(在撰写本文时:10.14.1),您可以使用sudo launchctl limit maxfiles 64000 524288
(默认为256),但仅在当前会话中有效。使用@ninjaPixel(https://superuser.com/a/1171028/760235)中的launchctl
作业获得永久解决方案。评论
您是怎么想出号码524288的?我以前的值为256,并且不受限制。
–筹码Roberson
19-10-6在21:39
#7 楼
类似于https://superuser.com/a/1171028/367819要检查Mac OS X系统上的当前限制,请运行:
launchctl limit maxfiles
最后两列分别是软限制和硬限制。
要在Mac OS X Yosemite中在系统范围内调整打开文件的限制,必须创建两个配置文件。第一个是/Library/LaunchDaemons/limit.maxfiles.plist中的属性列表(aka plist)文件,其中包含以下XML配置:
<?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>200000</string>
<string>200000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
这将设置打开的文件限制为200000。第二个plist配置文件应存储在/Library/LaunchDaemons/limit.maxproc.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.maxproc</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>limit</string>
<string>maxproc</string>
<string>2048</string>
<string>2048</string>
</array>
<key>RunAtLoad</key>
<true />
<key>ServiceIPC</key>
<false />
</dict>
</plist>
两个plist文件必须由root:wheel拥有,并具有-rw-r--r--权限。默认情况下,此权限应该存在,但是您可以通过运行sudo chmod 644来确保已存在这些权限。尽管上述步骤将导致重新启动时正确设置系统范围的打开文件限制,但是您可以通过运行launchctl limit来手动应用它们。除了在系统级别设置这些限制之外,我们建议在会话级别上也通过在您的bashrc,bashprofile或类似文件上附加以下行来设置会话级别:
ulimit -n 200000
ulimit -u 2048
与plist文件,bashrc或类似文件类似文件应具有-rw-r--r--权限。此时,您可以重新启动计算机,并在终端中输入ulimit -n。如果您的系统配置正确,则应该看到maxfiles已设置为200000。
您可以阅读本文以获取更多详细信息。
https:/ /gist.github.com/tombigel/d503800a282fcadbee14b537735d202c
请记住重新启动Mac以使值生效。
评论
如果已经有答案,则该帖子都应标记为重复,否则,请通过链接发布相关信息,因为该链接可能永远无效。
– zymhan
19年5月30日在1:04
为我完美地工作。运行Mojave 10.14.6
– Aditya Garg
20 Mar 4 '20 at 20:10
#8 楼
毕竟,在我的Java上面进行的所有更改后,所做的文件没有超过10000个。解决方案是此jvm标志-XX:-MaxFDLimit评论
空白空间不好,是吗?我在-XX:和-MaxFDLimit之间有一个空格,它不起作用。谢谢
– Coder-guy
20-10-1在14:01
#9 楼
您可以运行lsof -n
,该进程打开太多文件。
然后杀死它。
或
sysctl -w kern.maxfiles=20480
将其更改为更大的一个。
评论
请说明该答案与已经给出的答案有何不同。
–斯蒂芬·劳赫(Stephen Rauch)
17年5月18日在3:30
#10 楼
我在执行chmod -R时遇到了它,所以我采取了一些较小的步骤来解决它,例如# for each directory
find . -type d -exec chmod 755 {} \;
评论
尽管这可能是一种解决方法,但它似乎并未真正回答问题。也许解释一下您无法摆脱的信息,然后提出将其作为减少问题的一种方法,将会改善您的答案。
–music2myear
17年1月4日在21:11
#11 楼
我在运行Catalina的2017 Macbook上遇到此问题。问题是Spotify(是最新的)和Spotify设置“显示本地文件”。此设置使Spotify可以浏览您的下载文件夹或其他文件夹,由于某种原因,它正在打开和检查但未关闭文件。检查lsof -n实际上是7500多个文件,其中包括成千上万个.jpg文件,因为我很长时间没有清理下载文件夹了。不确定为什么Spotify没有关闭它们,这似乎是一个错误。
禁用此设置并重新启动Spotify可能有效,或者只是卸载即可。
#12 楼
不应将增加授权文件的读取和写入视为一种好习惯。如sanmai和许多人建议的那样,您可以简单地杀死一些压倒性的进程。
文件操作次数。
1- /步骤1检索最消耗文件的进程
lsof -n +c 0 | cut -f1 -d' ' | uniq -c | sort | tail
2- /步骤2使用这些名称杀死它们涉及的所有进程。
请注意不要系统地杀死任何消耗文件的进程,因为它可能对您当前的活动至关重要。
ps -e -a |grep file-consuming-process |for i in `awk {'print'}`; do kill -9 $i; done
玩得开心:)
评论
您是否想进一步解释何时发生?在什么情况下?@slhck-我有同样的问题。情况基本上是“随机的”。我是一名开发人员,所以我大量使用Mac:同时运行一个或多个数据库,Web服务器,测试工具,一个或多个浏览器以及一个音乐播放器。谷歌浏览器似乎是一个打开了很多文件的程序。
其实,我的“大量使用”不是问题。我的内核和每个进程的最大打开文件数设置远低于默认值。
如果您阅读了Nathan的评论,并且想知道为什么他不包括有关默认值的任何详细信息,那是因为他在下面的答案中将其全部拼写了出来。 (好答案!:)
我和Nathan Long处于相同的使用情况,发现重启Apache是“解决”问题的唯一步骤。我应用了所有以下限制增加,但它们并没有立即起作用。我在同一台Macbook上运行命令行phpUnit测试>硒服务器> firefox> apache> php> mysql。在我升级为特立独行者之前,一直工作良好。我得到的错误在于正在测试的Web应用程序,即php / apache文件耗尽,因此大概不受shell设置的控制。