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

时间:2014-03-18 09:59:44

标签: node.js

我遇到Node.js问题并将文件上传到服务器。要将文件上传到服务器,请使用此plugin。当开始上传到服务器的文件时,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

16 个答案:

答案 0 :(得分:1071)

运行以下命令以避免ENOSPC:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

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

fs.inotify.max_user_watches=524288

然后执行:

sysctl --system

这也将在重新启动后持续存在。 Technical Details Source

答案 1 :(得分:64)

ENOSPC表示驱动器上没有空间。

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

来源:npm 1.1.21 cannot write, ENOSPC在npm的github回购中。

注意我按照上面描述的方式解决了我的问题。但是,请参阅下面的Murali Krishna's answer,这是更全面的。

答案 2 :(得分:18)

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

来源:Grunt watch error - Waiting…Fatal error: watch ENOSPC

答案 3 :(得分:7)

重新启动机器解决了我的问题。我首先尝试擦除/tmp/,但节点仍在抱怨。

答案 4 :(得分:5)

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

npm cache clear

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

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

如果您想知道如何Increase the amount of inotify watchers仅单击链接。

答案 5 :(得分:5)

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

开发服务器使用inotify来实现热重装。 inotify API使开发服务器可以监视文件并在文件更改时得到通知。

默认的inotify文件监视限制因分发而异(在Fedora上为8192)。开发服务器的需求通常会超出此限制。

最好的方法是尝试临时增加文件监视限制,然后在满意的情况下进行永久配置更改。但是请注意,这会更改整个系统的配置,而不仅仅是节点。

要查看当前限制,请执行以下操作:

sysctl fs.inotify.max_user_watches

要临时设置新的限制,请执行以下操作:

# 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

设置永久限制:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

答案 6 :(得分:4)

如果您使用的是VS Code,则在大型工作区错误中将无法观看。

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

这表明VS Code文件监视程序用完了句柄,因为工作空间很大并且包含许多文件。可以通过运行以下命令查看当前限制:

cat /proc/sys/fs/inotify/max_user_watches

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

fs.inotify.max_user_watches=524288

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

注意:524288是观看文件的最大值。尽管您可以观看任何文件,但建议您仅观看不超过该限制的文件。

答案 7 :(得分:1)

如果linux文件系统上的/tmp挂载被挂载为溢出(通常大小为1MB),这可能是由于您未将/tmp指定为其自己的分区并且您的根文件系统已填满且/tmp被重新安排为后备。

要在清除空间后修复此问题,只需卸下后备,它应该重新安装在原始位置:

sudo umount overflow

答案 8 :(得分:1)

我解决了我的问题,导致所有跟踪器控制进程被终止(如果你使用GDM,你可以试试,如果脚本在服务器上运行,显然不是你的情况)

tracker-control -r

我的设置:Arch with GNOME 3

答案 9 :(得分:0)

对我来说,我已经达到了用户可以拥有的最大文件数

使用quota -s检查您的号码,并确保文件下的号码不会太接近配额

答案 10 :(得分:0)

如果在尝试运行rm -rf tmp命令期间遇到此错误,请ember s目录。然后再次运行handleChange。它帮助了我。

答案 11 :(得分:0)

在Ubuntu 18.04上,我尝试了一种技巧,该技巧用于重新激活ionic / node监视的文件,并且在这里也可以使用。这对于那些无法访问系统conf文件的人很有用。

CHOKIDAR_USEPOLLING=1 npm start

答案 12 :(得分:0)

这听起来很奇怪,但是是的,系统重新启动或killall node为我解决了这个问题。

答案 13 :(得分:0)

这表明VS Code文件监视程序用完了句柄,因为工作空间很大并且包含许多文件。手表的最大限制已达到,您可以通过运行以下命令查看限制:

cat /proc/sys/fs/inotify/max_user_watches

运行以下代码可解决此问题:

fs.inotify.max_user_watches=524288

答案 14 :(得分:-3)

我遇到了相同的错误。当我运行Reactjs应用程序时。我要做的只是删除node_modules文件夹,然后键入并再次安装node_modules。这样可以消除错误。

答案 15 :(得分:-13)

就我而言,在linux上,sudoing解决了这个问题。

示例:

sudo gulp dev