通过修改sysctl.conf修复nodejs的运行错误:System limit for number of file watchers reached

目录

一、出现问题

二、解决思路

三、学习拓展

1.fs.inotify.max_user_watches参数的含义

2.那系统默认单个进程可以同时监视的文件系统事件的最大数量是多少呢

3./etc/sysctl.conf这个文件是干什么的

4.sysctl常用的命令


一、出现问题

本地项目ant design pro安装完成后,使用yarn start运行后报错,错问信息为,如下,查找资料发现问题不仅仅是ant,用vue或其他框架也会出现,进行问题排查发现是系统进程能够同时监视的文件系统事件的数量造成的。

Error: ENOSPC: System limit for number of file watchers reached, watch '/www/wwwroot/easy.project/web/src/pages/Admin.tsx

二、解决思路

找到/etc/sysctl.conf文件,编辑

vi /etc/sysctl.conf

复制以下内容到文件最后,最后的这个数字可以根据个人情况设置

fs.inotify.max_user_watches=655350

重新加载系统参数(建议),或者重启服务器

sysctl -p

三、学习拓展

1.fs.inotify.max_user_watches参数的含义

fs.inotify.max_user_watches=655350 是一个 Node.js 中文件系统(fs)模块的配置选项,用于设置用户最大监视器数量。该选项指定了单个进程可以同时监视的文件系统事件的最大数量。

在 Linux 系统中,inotify 是一种高效的文件系统事件通知机制,它允许进程异步地监视文件系统的变化,例如文件的创建、修改或删除等操作。通过设置 fs.inotify.max_user_watches 的值,可以限制单个进程能够同时监视的文件系统事件的数量,从而避免过多的资源消耗和性能问题。

在这个特定的配置选项中,max_user_watches 被设置为 655350,表示单个进程最多可以同时监视 655350 个文件系统事件。这个值可以根据实际需求进行调整,以平衡性能和资源消耗之间的关系。

需要注意的是,这个配置选项仅适用于 Node.js 中的文件系统模块,并且需要在启动 Node.js 应用程序时进行设置。

2.系统默认单个进程可以同时监视的文件系统事件的最大数量是多少

在 Linux 系统中,默认的 fs.inotify.max_user_watches 值是 4096。这意味着单个进程可以同时监视最多 4096 个文件系统事件。

这个默认值是根据系统的资源和性能需求进行选择的。较小的默认值可以在保持较好的性能的同时,减少对系统资源的消耗。

需要注意的是,虽然可以设置更大的 max_user_watches 值来增加单个进程可以监视的文件系统事件数量,但这也会增加内存和 CPU 的使用量,可能会对系统性能产生一定的影响。因此,在设置 max_user_watches 时需要权衡性能和资源消耗之间的关系,根据具体需求进行调整。

3./etc/sysctl.conf这个文件是干什么的

/etc/sysctl.conf 是 Linux 系统中一个用于配置内核参数的文件。它允许系统管理员手动修改内核的行为,以适应特定的系统需求或优化性能。

通过编辑 /etc/sysctl.conf 文件,可以设置各种内核参数,包括网络参数、安全参数、性能参数等。这些参数控制着系统的各个方面,例如网络连接的速度和稳定性、安全策略的强度、文件系统的缓存机制等。

当系统启动时,内核会根据配置文件中的参数值来初始化和调整内核的行为。因此,通过修改 /etc/sysctl.conf 文件,可以改变系统在运行时的行为,以满足不同的需求。

需要注意的是,对 /etc/sysctl.conf 文件的修改需要具有 root 权限或者使用 sudo 命令进行操作。修改后的配置会在系统重启后生效。

下面是一个示例的 /etc/sysctl.conf 文件内容:

# Example /etc/sysctl.conf file

# Enable net.ipv4.tcp_syncookies to mitigate SYN flood attacks
net.ipv4.tcp_syncookies = 1

# Increase the maximum number of open files to prevent ulimit errors
fs.file-max = 65535

# Enable IP forwarding
net.ipv4.ip_forward = 1

# Set the kernel TCP receive buffer size
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216

# Disable IPv6 address spoofing checks
net.ipv6.conf.all.spoofing = 0
net.ipv6.conf.default.spoofing = 0

上述示例中,修改了四个参数:net.ipv4.tcp_syncookiesfs.file-maxnet.ipv4.ip_forwardnet.core.rmem_*net.core.wmem_*。这些参数分别用于启用 TCP SYN Cookie 防护、增加最大打开文件数、启用 IPv4 转发以及调整内核接收和发送缓冲区的大小。

请注意,实际的 /etc/sysctl.conf 文件可能包含更多的配置项,具体取决于系统的需求和架构。

4.sysctl常用的命令

打印当前所有可用的内核参数变量和值。

sysctl -a 

从配置文件 /etc/sysctl.conf 加载内核参数设置。

sysctl -p

sysctl -w 参数名=值 临时修改 sysctl 配置,设置内核参数对应的变量值,重启后失效。

如:要设置 IPv6 转发功能,可以运行以下命令:

sysctl -w net.ipv6.conf.all.forwarding=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值