Node.js:什么是ENOSPC错误以及如何解决?

Gif*_*ffo 324 node.js

我有Node.js的问题并将文件上传到服务器.要将文件上传到服务器,请使用此插件.当开始上传到服务器的文件时,Node.js进程崩溃并显示错误:

错误:ENOSPC.

服务器代码不运行.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  4.1G  3.5G  55% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  168K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
/dev/xvdf       9.9G  3.0G  6.5G  32% /vol
overflow        1.0M  1.0M     0 100% /tmp
Run Code Online (Sandbox Code Playgroud)

Mur*_*hna 1194

运行以下命令以避免ENOSPC:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

对于Arch Linux,将此行添加到/etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288
Run Code Online (Sandbox Code Playgroud)

然后执行:

sysctl --system
Run Code Online (Sandbox Code Playgroud)

这也将在重新启动后持续存在. 技术细节来源

  • @Spouark就是这样做的:https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details (22认同)
  • 这不是一个随机数。每个使用的inotify监视占用540字节(32位系统)或1 kB(64位上的双精度)。这是从内核内存中抽出的,它是不可交换的。因此,假设您将最大值设置为524288,并且全部使用(不可能),那么您将使用大约。256MB / 512MB的32位/ 64位内核内存。 (2认同)

Blu*_*Blu 72

ENOSPC 意味着驱动器上没有空间.

也许/tmp是满的?您可以npm通过设置npm config set tmp /path/to/some/other/dir或删除/tmp文件夹中的所有内容来配置使用其他临时文件夹.

来源:npm 1.1.21无法在github中的npm的repo中编写ENOSPC.

注意我以上面描述的方式解决了我的问题.但是,请参阅下面的Murali Krishna的答案,这是更全面的.

  • 错误,在观看文件时,通常在开发人员工作区中会发生此错误(通过grunt/gulp).这与进程可以监视的文件数量(本机监视)的unix限制有关.另一个答案(echo fs.inotify.max_user_watches = 524288)是这些情况下的解决方案. (68认同)

orb*_*ven 23

不能归功于此,但@grenade指出npm dedupe将解决原因(文件太多)而不是症状.

来源:Grunt手表错误 - 等待...致命错误:观看ENOSPC.


Dan*_*ira 13

解决我的问题的一种简单方法是:

npm cache clear
Run Code Online (Sandbox Code Playgroud)

npm或它所控制的进程正在监视太多文件。在构建节点上更新max_user_watches可以永久修复它。对于debian,请在终端上输入以下内容:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

如果您想知道如何增加inotify观察者的数量,只需单击链接。

  • 我对“ forever”有疑问,当我创建文件“ .foreverignore”并将其添加到“ node_modules”文件夹中时,修复了该问题。 (2认同)

Bjo*_*pen 8

重新启动机器解决了我的问题.我第一次尝试擦拭/tmp/但节点仍在抱怨.


Woo*_*low 7

在 Linux 上,这可能是文件监视数量的限制。

开发服务器使用inotify来实现热重载。inotify API 允许开发服务器监视文件并在文件更改时收到通知。

默认的 inotify 文件监视限制因发行版而异(Fedora 上为 8192)。开发服务器的需求往往超过这个限制。

最好的方法是尝试暂时增加文件监视限制,如果您对此感到满意,则将其永久更改。但是请注意,这会更改整个系统的配置,而不仅仅是节点。

要查看您的当前限制:

sysctl fs.inotify.max_user_watches
Run Code Online (Sandbox Code Playgroud)

临时设置新限制:

# this limit will revert after reset
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p
# now restart the server and see if it works
Run Code Online (Sandbox Code Playgroud)

要设置永久限制:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)


kar*_*agi 6

如果您使用 VS Code,那么它应该无法在大型工作区中观看错误。

"Visual Studio Code is unable to watch for file changes in this large workspace" (error ENOSPC)
Run Code Online (Sandbox Code Playgroud)

它表明 VS Code 文件观察器的句柄不足,因为工作区很大并且包含许多文件。可以通过运行以下命令查看当前限制:

cat /proc/sys/fs/inotify/max_user_watches
Run Code Online (Sandbox Code Playgroud)

/etc/sysctl.conf通过编辑此行并将其添加到文件末尾,可以将该限制增加到最大值:

fs.inotify.max_user_watches=524288
Run Code Online (Sandbox Code Playgroud)

然后可以通过运行加载新值sudo sysctl -p

注意:524288 是观看文件的最大值。虽然您可以观看任意数量的文件,但也建议您仅观看该限制。


小智 5

在 Ubuntu 18.04 上,我尝试了一个技巧,我用来重新激活 ionic/node 监视的文件,它也可以在这里工作。这对于那些无权访问系统 conf 文件的人可能很有用。

CHOKIDAR_USEPOLLING=1 npm start
Run Code Online (Sandbox Code Playgroud)