Fix MacOS Too Many Open Files
在 MacOS 系统中,当你运行大型应用或开发项目时,可能会遇到 “Too many open files” 错误。这是因为系统默认限制了同时打开的文件描述符数量。本文将介绍如何永久修改这个限制。
问题背景
MacOS 默认的文件描述符限制相对较低,在以下场景中容易触发此限制:
- 运行大型开发项目(如 Node.js 应用)
- 使用数据库服务
- 运行容器化应用
- 处理大量并发连接
解决方案
1. 创建配置文件
首先,创建一个新的系统配置文件:
sudo vim /Library/LaunchDaemons/limit.maxfiles.plist
2. 配置文件内容
将以下内容复制到配置文件中:
<?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>
这个配置将软限制设置为 64000,硬限制设置为 524288。
3. 设置文件权限
配置正确的文件权限和所有权:
sudo chmod 644 /Library/LaunchDaemons/limit.maxfiles.plistsudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist
4. 加载配置
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
5. 验证设置
检查新的限制是否生效:
launchctl limit maxfiles
故障排除
如果遇到加载配置失败的情况,可以尝试以下步骤:
- 先卸载现有配置:
sudo launchctl bootout system /Library/LaunchDaemons/limit.maxfiles.plist
- 重新启用服务:
sudo launchctl enable system/limit.maxfiles
- 检查当前用户的文件限制:
ulimit -n
注意事项
- 修改系统限制需要管理员权限
- 建议在修改后重启系统以确保设置完全生效
- 设置过大的限制可能会影响系统性能,建议根据实际需求调整
- 这些更改是系统级的,会影响所有用户和应用