解决文件描述符不足问题
查看当前限制值
# 这将显示当前 shell 的文件描述符软限制。
ulimit -n
# 硬限制
ulimit -Hn
# 查看已经使用 ?
lsof | wc -l
- 查看整个系统的文件描述符使用情况
❯ cat /proc/sys/fs/file-nr
6944 0 9223372036854775807
已分配的文件句柄数(in-use) 已分配但未使用的句柄数(unused) 最大可分配句柄数(max)
如果第一列接近第三列,则需要增加系统最大值:
sysctl fs.file-max
sudo sysctl -w fs.file-max=2097152
fs.file-max = 2097152
临时增加限制
ulimit -n 65535
永久增加限制
/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
root soft nofile 65536
root hard nofile 65536
如果使用 systemd 启动 NFS,还需要设置 systemd 服务级别的限制。
systemctl edit nfs-kernel-server.service
[Service]
LimitNOFILE=65536
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
解决问题
inotify 的最大实例数
$ cat /proc/sys/fs/inotify/max_user_instances
128
解决方法: 临时设置更大值:
sudo sysctl -w fs.inotify.max_user_instances=8192
fs.inotify.max_user_instances = 8192
sudo sysctl -p
还可以检查以下参数,如有必要也适当调大:
cat /proc/sys/fs/inotify/max_user_watches # 默认 8192
cat /proc/sys/fs/inotify/max_queued_events # 默认 16384
- 确保 systemd 对服务的限制足够大 即使全局 ulimit 设置正确,systemd 服务也可能有自己的限制。
编辑服务文件:
sudo systemctl edit nfs-kernel-server.service
[Service]
LimitNOFILE=1048576
sudo systemctl daemon-reload
sudo systemctl restart nfs-kernel-server