Node.js:ENOSPCエラーとは何ですか?


349

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

1
はい、でもファイルアップロードには1MBで十分だとは思わないので、Blu Angelからの回答のようにtmp-dirを別の場所に変更します
— Jacob A.

3
ユースケースは異なるように聞こえるかもしれませんが、別のSOの質問からこの問題を解決する優れた方法を次に示します。
— Isaac Gregson

これに遭遇した人は、この回答もチェックしてください。gruntとgulpを使用すると多くの時計が使用される可能性があるため、この回答ではそれを増やす方法について詳しく説明します。
— セイリア2015

回答:


1273

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

これは再起動後も持続します。 技術詳細ソース


24
これが何をするかです。github.com/guard/listen/wiki/...
— アグスSyahputra

2
乱数ではありません。使用される各inotifyウォッチは540バイト(32ビットシステム)、または1 kB(ダブル-64ビット)を消費します。これは、スワップできないカーネルメモリから発生します。したがって、最大値を524288に設定し、すべてが使用された(確率が低い)とすると、約を使用します。256 MB / 512 MBの32ビット/ 64ビットカーネルメモリ。
— Murali Krishna

理論的には、十分なRAMがある限り、最大値はありません。実際には、524288はアプリによって公式に推奨されており、人々はこれを200万に設定し、それに付随してメモリ使用量を伴います。
— Murali Krishna

これは問題を解決するのに役立ちました。このリンクgithub.com/guard/listen/wiki/…にもすべての詳細があります。ありがとう
— amitsin6h

他の誰かが出てくるエラーが単に奇妙であると奇妙に感じENOSPCますか?次のような出力の直後に説明がないのはなぜ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のリポジトリにあるENOSPC。

上記のソースに記載されている方法で問題を解決したことに注意してください。ただし、より包括的な、以下のMurali Krishnaの回答を参照してください。


/ tmpフォルダーをクリーンアップし、npm一時フォルダーを変更しましたが、同じ問題があります。npm config get tmpshow / vol / deploy / tmp
— Giffo

あなたはあなたのアウトプットを再び示すことができますか?dirの変更後の出力
— Blu

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

1
エラーリスナーはありますか?作成しない場合は、結果の出力をチェックしてください
— Blu

72
間違っています。このエラーは、開発者のワークスペースで(grunt / gulpを介して)ファイルを見るときによく発生します。これは、プロセスが監視できるファイル数(ネイティブウォッチ)のUNIX制限に関係しています。他の答え(echo fs.inotify.max_user_watches = 524288)は、これらの場合の解決策です。
— Cancerbero、2015年


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

7

マシンを再起動すると、問題が解決しました。私は最初にワイプを試しました/tmp/が、ノードはまだ不平を言っていました。


再起動後に問題が再発。やってdedupe助けました。
— Parnab Sanyal、

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でArch


1
指定するのを忘れた、うん、私は同じ状況でした:Arch + GNOME
— Denys Vitali

2

/tmpLinuxファイルシステムのマウントがオーバーフローとしてマウントされている場合(多くの場合1MBのサイズ)、/tmp独自のパーティションとして指定していないため、ルートファイルシステムがいっぱいになり/tmp、フォールバックとして再マウントされた可能性があります。

スペースをクリアした後でこれを修正するには、フォールバックをアンマウントするだけで、元のポイントで再マウントする必要があります。

sudo umount overflow

2

ember serverコマンドを実行しようとしたときにこのエラーが発生した場合は、rm -rf tmpディレクトリに移動してください。その後、ember s再度実行します。それは私を助けました。


2

同じエラーが発生しました。Reactjsアプリを実行している間。私が行うことは、node_modulesフォルダーを削除し、node_modulesをもう一度入力してインストールすることです。これでエラーがなくなります。


これは実際に機能しますが、なぜ反対票が投じられるのでしょうか。それが問題です。しかし、それは問題を解決するので、他に何が必要ですか?
— AlexNikonov

1
わからない、人々は私にいくつかの個人的な問題を抱えているかもしれません。hahaha
— 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.