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
네,하지만 난 그렇게 블루 엔젤에서이 질문에 같은 다른 위치로 TMP-디렉토리를 변경 1메가바이트는 파일 업로드에 대한 충분한 생각 해달라고
야곱 A.

3
유스 케이스와 다를 수 있지만 다른 SO 질문 에서이 문제에 대한 훌륭한 해결책이 있습니다 .
Isaac Gregson

이 문제를 해결하려는 사람은 이 답변도 확인하십시오 . grunt와 gulp를 사용하면 많은 시계를 사용할 수 있으므로이 답변은 그것을 높이는 방법을 자세히 설명합니다.
Seiyria

답변:


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

재부팅 후에도 지속됩니다. 기술 정보 소스


25
이것이하는 일입니다. github.com/guard/listen/wiki/…
Agus Syahputra

2
난수가 아닙니다. 사용 된 각 inotify watch는 540 바이트 (32 비트 시스템) 또는 1kB (더블-64 비트)를 사용합니다. 이것은 커널 메모리에서 나오며 스왑이 불가능합니다. 따라서 최대 값을 524288로 설정하고 모두를 사용한다고 가정 할 때 (약간 불가능한) 약. 256MB / 512MB의 32 비트 / 64 비트 커널 메모리
Murali Krishna

이론적으로 충분한 RAM이 있으면 최대 값이 없습니다. 실제로 524288은 공식적으로 앱에서 권장되었으며 사람들은 메모리 사용과 함께 2 백만으로 설정했습니다.
Murali Krishna

이것은 github.com/guard/listen/wiki/… 링크를 통해 문제를 해결하는 데 도움이되었습니다 . 감사합니다
amitsin6h

다른 사람이 나오는 오류가 단순히 이상하다는 것을 알고 ENOSPC있습니까? 왜 출력 직후에 설명이 ENOSPC - no space on drive없습니까? 당신이 무슨 뜻인지 알면 물론, 에러 코드가 의미가 있습니다 ( E rror NO SP C 전자), 그런데 왜 그냥 포기하지 사용자가 그 앞까지 정보?
Shadoninja 2016 년

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 temp 폴더를 변경했지만 동일한 문제가 있습니다. 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를 통해) 개발자 작업 영역에서 자주 발생합니다. 이것은 프로세스가 감시 할 수있는 파일의 수에 대한 유닉스 제한과 관련이 있습니다 (네이티브 감시). 다른 답변 (echo fs.inotify.max_user_watches = 524288)이 그러한 경우에 해결책입니다.
cancerbero


20

내 문제를 해결하는 간단한 방법은 다음과 같습니다.

npm cache clear

npm 또는 그것에 의해 제어되는 프로세스가 너무 많은 파일을보고 있습니다. 빌드 노드에서 max_user_watches를 업데이트하면 영구적으로 수정할 수 있습니다. 데비안의 경우 터미널에 다음을 입력하십시오.

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

3

우분투 18.04에서 이온 / 노드로 파일 감시를 다시 활성화하는 데 사용하는 트릭을 시도했으며 여기에서도 작동합니다. 시스템 conf 파일에 액세스 할 수없는 사람들에게 유용 할 수 있습니다.

CHOKIDAR_USEPOLLING=1 npm start

2

모든 추적기 제어 프로세스를 죽이는 문제를 해결했습니다 (스크립트가 서버에서 실행중인 경우 분명히 GDM을 사용하면 시도 할 수 없습니다)

tracker-control -r

내 설정 : 그놈 3과 아치


1
네, 그것을 지정 분실, 내가 같은 상황에 있었다 : 아치 + GNOME
데니스 비탈리

2

/tmpLinux 파일 시스템의 마운트가 오버플로 (종종 1MB 크기)로 마운트 된 경우 /tmp자체 파티션으로 지정하지 않고 루트 파일 시스템이 채워져 /tmp폴백으로 다시 마운트 되었기 때문일 수 있습니다 .

공간을 비운 후이 문제를 해결하려면 대체를 마운트 해제하면 원래 위치에서 다시 마운트해야합니다.

sudo umount overflow

2

ember server명령 을 실행하는 동안이 오류가 발생하면 rm -rf tmp디렉토리 를 참조하십시오 . 그런 다음 ember s다시 실행 하십시오. 그것은 나를 도왔다.


2

같은 오류가 발생했습니다. Reactjs 앱을 실행하는 동안 내가하는 일은 node_modules 폴더를 제거하고 node_modules를 다시 입력하고 설치하는 것입니다. 오류가 제거됩니다.


이것이 실제로 작동하는 이유는 무엇입니까? 그러나 그것은 문제를 해결하므로 다른 것이 필요합니까?
AlexNikonov 2016 년

1
잘 모르겠습니다. 사람들이 나와 개인적인 문제를 겪을 수 있습니다. 하하하
Ghayyas Mubashir

1

나를 위해 사용자가 소유 할 수있는 최대 파일 수에 도달했습니다.

번호를 확인 quota -s하고 파일 아래의 번호가 할당량에 너무 가깝지 않은지


1

이것은 매우 이상하게 들리지만, 시스템을 재부팅하거나 killall node문제를 해결합니다.


-15

제 경우에는 리눅스에서 sudoing으로 문제가 해결되었습니다.

예:

sudo gulp dev

5
이것은 위험하다! 디스크 공간의 특정 비율이 루트 용으로 예약되어있어 핵심 문제를 해결하지 못하여 권한이없는 사용자가 사용할 수있는 공간이 없습니다 (대상 위치에).
Liam Dawson 4

sudo를 사용하는 것은 일을 발생시키는 좋은 방법이지만, 대부분의 사람들은 sudo가 사용될 때 발생하는 모든 것을 이해하지 않습니다. 특히 npm 및 npm 모듈에서 sudo를 사용하면 파일 작성 또는 보호 된 포트 사용과 같이 root로 수행하고 싶지 않은 root로 수행되는 작업이 발생할 수 있습니다. nvm / npm / node와 관련하여 기본적으로 "sudo 사용"조언은 얼굴에 평평하게 떨어질 수 있습니다 (아마도 스터 블링하고 태양을 응시 한 후).
bschlueter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.