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


348

我在使用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

1
“ ENOSPC”表示驱动器上没有空间,那么您将文件保存在哪里?也许/ tmp已满?
Jacob A.

我将文件保存在/ dev / xvda1中。我可以制作rm -rf / tmp / *吗?
Giffo 2014年

1
是的,但是我认为1mb不足以进行文件上传,因此请将tmp-dir更改为另一个位置,例如Blu Angel
Jacob A

3
听起来您的用例可能有所不同,但是这是另一个SO问题的很好解决方案
艾萨克·格雷格森

对于绊脚石的任何人,也请查看此答案。使用咕unt咕的东西可以使用很多手表,因此此答案详细说明了如何增加手表。
Seiyria

Answers:


1271

运行以下命令以避免使用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

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



2
这不是一个随机数。每个使用的inotify监视占用540字节(32位系统)或1 kB(在64位上为double-)。这是从内核内存中抽出的,它是不可交换的。因此,假设您将最大值设置为524288,并且全部使用(不可能),那么您将使用大约。256MB / 512MB的32位/ 64位内核内存。
穆拉里·克里希纳

理论上,只要您有足够的RAM,就没有最大值。实际上,应用程序已正式推荐524288,人们将其设置为200万,并附带了内存使用情况。
穆拉里·克里希纳

这也帮助我解决了问题,此链接github.com/guard/listen/wiki/…具有所有详细信息。谢谢
amitsin6h

还有其他人会发现奇怪的是简单的错误ENOSPC吗?为什么在输出like之后没有描述ENOSPC - no space on drive?当然,一旦您知道错误代码的含义(E rror NO SP a C e),该错误代码就很有意义了,但是为什么不直接向用户提供该信息呢?
Shadoninja

73

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

也许/tmp饱了?您可以npm通过设置将其配置为使用其他临时文件夹npm config set tmp /path/to/some/other/dir,或者从/tmp文件夹中删除所有内容。

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

注意,我以上述资源中描述的方式解决了我的问题。但是,请参阅下面的Murali Krishna的答案,该答案更为全面。


我清理了/ tmp文件夹并更改了npm temp文件夹,但是有同样的问题。npm config get tmpshow / vol / deploy / tmp
Giffo 2014年

你能再次展示你的作品吗?更改目录后获得的输出
Blu Blu

events.js:71 throw arguments[1]; // Unhandled 'error' event Error: ENOSPC, write
Giffo 2014年

1
你有错误监听器吗?如果不是不写一个,然后检查结果输出
2014年

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


20

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

npm cache clear

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

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

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


2
forever,在创建文件.foreverignore并将其添加到文件夹时已解决该问题node_modules.
Vilintritenmert


4

在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

谢谢你,这解决了我的问题。
乔什

谢谢!!您的临时解决方案有效!
JRichardsz

3

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

CHOKIDAR_USEPOLLING=1 npm start

2

我解决了杀死所有跟踪器控制进程的问题(如果您使用GDM,则可以尝试,如果脚本在服务器上运行,显然可以,但不可以)

tracker-control -r

我的设置:使用GNOME 3进行构建


1
是的,忘了指定它,是的,我当时处在相同的情况:Arch + GNOME
Denys Vitali

2

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

要在清除空间后解决此问题,只需卸载后备,它应该在其原始位置重新安装:

sudo umount overflow

2

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


2

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


这确实有效,为什么要低票-这是问题。但这解决了问题,那么您还需要什么?
AlexNikonov

1
不知道,可能是人民对我有一些个人问题。哈哈哈
Ghayyas Mubashir

1

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

检查您的电话号码,quota -s并且文件下的电话号码与配额的距离不太近



-15

以我为例,在Linux上,sudoing解决了该问题。

例:

sudo gulp dev

5
这很危险!它可能成功了,因为为root保留了一定百分比的磁盘空间,这不能解决核心问题-没有空间可作为非特权用户使用(在目标位置)。
利亚姆·道森

使用sudo是使事情发生的绝妙方法,但是大多数人都忽略了使用sudo时发生的一切。特别是对于npm和npm模块,使用sudo可能会导致root用户执行不希望由root用户执行的事情,例如文件创建或使用受保护的端口。基本上,“使用sudo”建议在涉及nvm / npm / node时(可能在跌跌撞撞并凝视着太阳之后)平放在脸上。
bschlueter '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.