Linux服务器报错OSError: [Errno 28] inotify watch limit reached的解决方法
今天我在使用服务器开启服务监听时,遇到报错OSError: [Errno 28] inotify watch limit reached。查了一下,这个报错信息表示 inotify
监视器的限制已经达到了系统的最大值,无法再监视更多的文件或目录。inotify
是一个用于监视文件系统事件的工具,很多应用程序(如 streamlit
)会使用它来监控文件和目录的变化。解决方法总结如下:
解决方法
方法1:增加 inotify
监视器的限制
你可以通过增加 inotify
监视器的限制来解决这个问题。这可以通过修改 /proc/sys/fs/inotify/max_user_watches
来实现。
-
临时增加限制(重启后会失效):
sudo sysctl fs.inotify.max_user_watches=524288
-
永久增加限制:
编辑
/etc/sysctl.conf
文件,添加或修改以下行:fs.inotify.max_user_watches=524288
然后加载新的配置:
sudo sysctl -p
方法2:检查和优化监视器的使用
某些应用程序可能会创建大量不必要的监视器,可以检查并优化这些应用程序的配置。
具体操作步骤
-
检查当前的
inotify
监视器数量:cat /proc/sys/fs/inotify/max_user_watches
查看当前的限制值。
-
查看当前使用的
inotify
监视器数量:find /proc/*/fd -lname anon_inode:inotify | wc -l
这将显示当前使用的
inotify
监视器数量。 -
增加
inotify
限制:临时增加:
sudo sysctl fs.inotify.max_user_watches=524288
永久增加:
编辑
/etc/sysctl.conf
文件:sudo nano /etc/sysctl.conf
添加以下行:
fs.inotify.max_user_watches=524288
保存并退出编辑器,然后应用新的设置:
sudo sysctl -p
-
重新启动
streamlit
:确保修改后的
inotify
限制生效,然后重新启动你的streamlit
应用程序。