操作系统错误:[Errno 28]达到inotify监视限制

问题描述 投票:0回答:4

我正在使用 Streamlit 制作一个基于 python 的 Web 应用程序。在Heroku中部署后,构建成功,但出现应用程序错误。我不知道源代码中的哪个位置生成了此错误。请帮我! 错误:

2022-07-18T18:55:37.985429+00:00 app[web.1]:     Inotify._raise_error()
2022-07-18T18:55:37.985439+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.10/site-packages/watchdog/observers/inotify_c.py", line 398, in _raise_error
2022-07-18T18:55:37.985636+00:00 app[web.1]:     raise OSError(errno.ENOSPC, "inotify watch limit reached")
2022-07-18T18:55:37.985677+00:00 app[web.1]: OSError: [Errno 28] inotify watch limit reached
2022-07-18T18:55:38.387667+00:00 heroku[web.1]: Process exited with status 1
2022-07-18T18:55:38.510041+00:00 heroku[web.1]: State changed from starting to crashed
2022-07-18T18:55:48.000000+00:00 app[api]: Build succeeded
2022-07-18T18:57:33.589417+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=invezto.herokuapp.com request_id=bc8f4556-852e-4dad-8b67-71e49ffaaf23 fwd="49.37.45.19" dyno= connect= service= status=503 bytes= protocol=https
2022-07-18T18:57:33.917128+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=invezto.herokuapp.com request_id=46e2e615-17dc-42f6-a86d-4dfc5fd5ecfc fwd="49.37.45.19" dyno= connect= service= status=503 bytes= protocol=https ``` 

 
python heroku streamlit heroku-api
4个回答
17
投票

在命令行添加选项

--server.fileWatcherType none
帮助我解决了类似的问题。完整的示例如下所示:

streamlit run app.py --server.fileWatcherType none

更多解决方案这里


11
投票

Streamlit 递归地监视应用程序脚本的父文件夹中的更改,例如

app.py
[来源].

这个想法是,如果源文件更新,应用程序将“重新运行”,以方便应用程序开发。但是,如果此文件夹包含太多子文件夹和子文件,显然

watchdog
达到限制并引发错误。如果您直接从包含大量配置文件等的主目录运行,则很容易发生这种情况。或者当您从
.git
中包含大量文件的 git 存储库运行时(只是推测)。

您可以通过将

app.py
脚本放置在仅包含您在开发过程中编辑的依赖项的(子)文件夹中来解决此问题,或者通过
--server.fileWatcherType none
并接受手动重新启动的麻烦。

streamlit run app.py --server.fileWatcherType none

(按照@swwt的建议)


0
投票

由于 Visual Studio Code 中的“打开文件夹”,这实际上发生在我身上。在Linux上运行。当我在打开其他 Streamlit Python 文件的情况下启动 vscode 时。然后从较大的代码目录/存储库中的另一个目录启动/打开文件夹项目 Python/Django。但是它开始将根文件夹中的所有文件添加到监视列表中。

根目录中有数千个来自其他项目的文件。

~笔记本/工作/开发 〜笔记本/个人/开发

每个都有不同的项目。

新的 django 项目是 ~notebooks/work/dev/djangoproject

Vscode 正在监视一切,一直到〜笔记本

Streamlit 然后会抱怨。类似于太多打开的文件句柄。

花了一天左右的时间才意识到罪魁祸首。我关闭了该文件夹,然后打开其他 Streamlit 项目中的文件,从那时起一切都很好。


0
投票

此问题可以通过以下方法永久解决 通过修改

fs.inotify.max_user_watches
内核参数来增加限制。

  1. 打开终端。
  2. 使用以下命令检查电流限制:
cat /proc/sys/fs/inotify/max_user_watches
  1. 如果您想将限制增加到 524288,您可以使用以下命令来实现:
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
  1. 要使更改永久生效,您可以将以下行添加到您的
    /etc/sysctl.conf
    文件中:
fs.inotify.max_user_watches=524288
  1. 然后使用以下命令加载新配置:
sudo sysctl -p

请将

524288
替换为适合您需要的数字。请注意,增加限制将消耗更多的内核内存。因此,请选择适合您的系统资源的数字。

© www.soinside.com 2019 - 2024. All rights reserved.