React Native Error : ENOSPC : 파일 감시자 수에 대한 시스템 제한에 도달했습니다.


161

새로운 빈 반응 네이티브 앱을 설정했습니다.

몇 개의 노드 모듈을 설치 한 후이 오류가 발생했습니다.

Running application on PGN518.
internal/fs/watchers.js:173
   throw error;
   ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
   at FSWatcher.start (internal/fs/watchers.js:165:26)
   at Object.watch (fs.js:1253:11)
   at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
   at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
   at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
   at FSReqWrap.oncomplete (fs.js:154:5)

파수꾼이 모든 파일 변경 사항을 감시 할 충분한 공간이 없다는 것을 알고 있습니다.

여기서 취할 수있는 최선의 조치가 무엇인지 알고 싶습니다.

node_modules폴더를에 추가하여 무시해야합니까 .watchmanconfig?


24
코드, 오류 또는 출력 이미지를 게시하지 마십시오! stackoverflow.com/help/how-to-ask

1
metro.config.js 백리스트에 코드를 추가하는 것을 고려해 보셨습니까? 이것은 스캔 볼륨을 줄여야합니다 : stackoverflow.com/questions/41813211/…
deepelement

답변:


272

Linux는 inotify 패키지를 사용하여 파일 시스템 이벤트, 개별 파일 또는 디렉토리를 관찰합니다.

React / Angular는 저장시 파일을 핫 리로드하고 재 컴파일하므로 모든 프로젝트의 파일을 추적해야합니다. inotify 감시 제한을 늘리면 경고 메시지가 숨겨집니다.

당신은 편집을 시도 할 수 있습니다

# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches

# config variable name (not runnable)
fs.inotify.max_user_watches=524288

41
문제가 무엇인지, 해결책이 무엇인지 또는 해결책이 문제를 해결하는 방법에 대해서는 설명하지 않습니다.
Native Coder

2
와우, 위와 비슷한 문제가 발생했지만이 솔루션이 100 % 해결했습니다. 감사합니다
akolliy

3
더 많은 것을 허용하는 대신 어떻게 감시자를 빼앗을까요?
조나단

2
작동하지만이 권리를 읽으면 한계가 높아집니다. 어쨌든 열린 감시자를 대신 닫을 수 있습니까?
zozo

1
@NativeCoder가 새 버전이 그 문제를 해결할까요?
zardilior

186

이 오류의 의미는 시스템이 모니터링하는 파일 수가 한계에 도달했음을 의미합니다 !!

결과 : 실행 된 명령이 실패했습니다! 또는 경고 발생 (예 : 반응 네이티브 시작 VSCode 실행)

해결책:

시스템 모니터링 파일 수 수정

우분투

sudo gedit /etc/sysctl.conf

하단에 줄 추가

fs.inotify.max_user_watches=524288

그런 다음 저장하고 종료하십시오!

sudo sysctl -p

그것을 확인하기 위해

그러면 해결됩니다!


이봐, 이것은 내 사건에서 해결되었습니다. 내 게시물에서도 공유했습니다. 감사합니다
Rashid Khan

감사합니다. 이것은 내 문제도 해결했습니다.
Nelson Katale

감사합니다! 이것은 나를 도왔다.
WISERDIVISOR

66

inotify 감시자의 양늘리는 문제를 해결할 수 있습니다 .

기술적 세부 사항에 관심이없고 Listen을 작동시키기 만 원하는 경우 :

  • Debian, RedHat 또는 다른 유사한 Linux 배포를 실행중인 경우 터미널에서 다음을 실행합니다.

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

  • ArchLinux를 실행중인 경우 대신 다음 명령을 실행하십시오.

    $ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

그런 다음 터미널에 붙여넣고 Enter 키를 눌러 실행하십시오.


기술적 세부 사항

Listen은 Linux에서 기본적으로 inotify를 사용하여 디렉토리의 변경 사항을 모니터링합니다. 모니터링 할 수있는 파일 수에 대한 시스템 제한이 발생하는 것은 드문 일이 아닙니다. 예를 들어 Ubuntu Lucid (64 비트) inotify 제한은 8192로 설정됩니다.

다음을 실행하여 현재 inotify 파일 감시 제한을 가져올 수 있습니다.

$ cat /proc/sys/fs/inotify/max_user_watches

이 제한이 디렉토리 내의 모든 파일을 모니터링하기에 충분하지 않은 경우 Listen이 제대로 작동하려면 제한을 늘려야합니다.

다음을 사용하여 새 제한을 임시로 설정할 수 있습니다.

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

한도를 영구적으로 설정하려면 다음을 사용하십시오.

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

또한의 가치에주의를 기울여야 할 수도 max_queued_events있고 max_user_instances계속해서 불평하는 경우 에도 마찬가지 입니다.


2
와우 감사합니다. 이것은 내 프로젝트가 커지면서 React JS와 유사한 오류에 대한 내 문제를 해결했지만 오류를 이해할 수 없었습니다. 즉, 좋은 일 적절한 대답했다입니다
피에르 Chevallier

4
이 문제에 대해 더 나은 수정이 필요합니다. 종속성이 가득한 손으로 새 프로젝트를 시작할 때 이와 같은 작업을 수행 할 필요가 없습니다.
Patrick W. McMahon 19

자세한 답변 감사합니다! 많은 도움이되었습니다. 저는 React Native를 개발 중이며 실제로 RN cli에는 더 많은 가치가 필요합니다. 따라서 위의 명령으로 성공적으로 변경했습니다. 더 높은 값이 성능과 메모리 사용에 나쁜 영향을 미칠 수 있는지 궁금합니다.
moondaddi

8

반응 node_modules 삭제

rm -r node_modules

yarn or npm install

yarn start or npm start

오류가 발생하면이 방법을 다시 사용하십시오.


왜 이것이 작동합니까? 감시중인 파일 수가 줄어들면 필요한 종속성을 다시 설치해도 파일이 다시 추가되지 않습니까?
icedwater

2
@icedwater node_modules를 삭제하면 React가 감시없이 새로운 inotify 인스턴스를 생성합니다. React에 누수가 발생하여 inotify 인스턴스가 채워 지므로 처음에 오류가 나타납니다.
계정

7

로부터 공식 문서 :

"Visual Studio Code는이 큰 작업 영역에서 파일 변경을 감시 할 수 없습니다."(ENOSPC 오류)

이 알림이 표시되면 작업 영역이 크고 많은 파일이 포함되어 있기 때문에 VS Code 파일 감시자에 핸들이 부족함을 나타냅니다. 현재 제한은 다음을 실행하여 볼 수 있습니다.

cat /proc/sys/fs/inotify/max_user_watches

제한은 편집하여 최대로 늘릴 수 있습니다.

/etc/sysctl.conf

다음 줄을 파일 끝에 추가합니다.

fs.inotify.max_user_watches = 524288

새 값은 다음을 실행하여로드 할 수 있습니다.

sudo sysctl -p

Arch Linux는 약간 다르게 작동합니다. 자세한 내용은 inotify 감시자 수 늘리기를 참조하세요.

524,288은 볼 수있는 최대 파일 수이지만 특히 메모리가 제한된 환경에있는 경우이 수를 낮추는 것이 좋습니다. 각 파일 감시는 540 바이트 (32 비트) 또는 ~ 1kB (64 비트)를 차지하므로 모든 524,288 개의 감시가 소비되었다고 가정하면 상한은 약 256MB (32 비트) 또는 512MB (64 비트)가됩니다. ).

다른 옵션

files.watcherExclude 설정을 사용하여 VS Code 파일 감시자에서 특정 작업 공간 디렉토리를 제외하는 것입니다. files.watcherExclude의 기본값은 node_modules 및 .git 아래의 일부 폴더를 제외하지만 VS Code가 추적하지 않도록하려는 다른 디렉토리를 추가 할 수 있습니다.

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

7

나는 sudo ie를 사용 하여이 문제를 해결했습니다.

sudo yarn start

또는

sudo npm start

5
이러한 명령이 문제를 해결할 수 있지만 문제를 해결하는 방법과 이유에 대한 설명포함 하여 게시물의 품질을 향상시키는 데 실제로 도움이되며 아마도 더 많은 찬성 투표를 받게됩니다. 지금 질문하는 사람뿐만 아니라 미래에 독자를 위해 질문에 답하고 있다는 것을 기억하십시오. 제발 편집 설명을 추가하고 제한 및 가정이 적용 무엇의 표시를 제공하는 답변을.
Brian

이것은 지금까지 구성을 변경하지 않는 가장 간단한 솔루션이지만 @Brian이 말했듯이 참조 또는 설명이 효과적인 방법으로 도움이 될 것입니다.
Genius

1
이것은 최악의 솔루션입니다. sudo이러한 종류의 사용을위한 것이 아니며 다른 문제도 발생할 수 있습니다.
Igor Parra

4

데비안 기반 배포판에서 개발하고 있던 노드 앱으로 나에게 일어났습니다. 첫째, 간단한 다시 시작으로 문제가 해결되었지만 다른 앱에서 다시 발생했습니다.

inotify 가 파일을 모니터링하고 디렉토리에서 변경 사항을 찾는 데 사용하는 감시자 수와 관련이 있으므로 더 높은 수를 제한으로 설정해야합니다.

여기에 게시 된 답변에서 해결할 수있었습니다 (감사합니다!)

그래서 나는 달렸다.

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

https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details 에서 무슨 일이 일어나고 있는지 자세히 알아보십시오.

도움이 되었기를 바랍니다.


1
Manjaro에서 잘 작동합니다!
Omar Dulaimi 20.05.05

위 링크는 권한이 필요합니다. 여기에 웨이 백 머신 버전이 있습니다 : web.archive.org/web/20200611175407/https://github.com/guard/…
Mahmoud K.

1

@snishalaka가 이미 지적했듯이 inotify 감시자 수를 늘릴 수 있습니다.

그러나 기본 수는 충분히 높고 프로세스가 제대로 정리되지 않은 경우에만 도달한다고 생각합니다. 따라서 관련 github 문제 에서 제안한대로 컴퓨터를 다시 시작 하고 오류 메시지가 사라졌습니다.



0

linuxmint 배포판 에서이 문제가 발생했습니다 . 내 앱의 / public 폴더에 추가 한 폴더와 하위 폴더 / 파일이 너무 많을 때 발생한 것 같습니다. 이 수정 사항을 적용했는데 잘 작동했습니다 ...

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

디렉토리를 / etc 폴더로 변경하십시오. cd /etc

그런 다음 이것을 실행하십시오. sudo systcl -p

터미널을 닫고 npm start작동하려면 다시해야 할 수 있습니다.

이것이 실패하면 반응 스크립트를 전역 적으로 설치하고 애플리케이션을 직접 실행하는 것이 좋습니다.

$ npm i -g --save react-scripts

그런 다음 응용 프로그램 을 npm start실행 react-scripts start하는 대신 실행하십시오.


0

Docker에서 프로젝트를 실행하는 경우 echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf컨테이너가 해당 설정을 자동으로 상속하고 내부에서 직접 수행하면 작동하지 않으므로 호스트 컴퓨터에서 및 기타 모든 명령을 수행해야합니다.


0

늦은 답변, 이미 좋은 답변이 많이 있습니다.

간단한 스크립트로 최대 파일 감시가 충분히 큰지 확인하고 그렇지 않은 경우 제한을 늘리려면 다음과 같이하십시오.

#!/usr/bin/env bash

let current_watches=`sysctl -n fs.inotify.max_user_watches`

if (( current_watches < 80000 ))
then
  echo "Current max_user_watches ${current_watches} is less than 80000."
else
  echo "Current max_user_watches ${current_watches} is already equal to or greater than 80000."
  exit 0
fi

if sudo sysctl -w fs.inotify.max_user_watches=80000 && sudo sysctl -p && echo fs.inotify.max_user_watches=80000 | sudo tee /etc/sysctl.d/10-user-watches.conf
then
  echo "max_user_watches changed to 80000."
else
  echo "Could not change max_user_watches."
  exit 1
fi

스크립트는 제한을로 증가 80000하지만 원하는 제한을 자유롭게 설정할 수 있습니다.


-1
  1. 첫째, 루트 권한으로 매번 실행할 수 있습니다.

    sudo npm 시작

  2. 또는 node_modules 폴더 를 삭제 하고 npm install다시 설치 하는 데 사용할 수 있습니다.

  3. 또는 영구적 인 해결책을 얻을 수 있습니다

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


-5

라이브러리를 사용하여 동일한 문제가 wifi있었지만 네트워크를 변경하면 완벽하게 작동했습니다.

네트워크 연결 변경


2
이 코멘트 수 있었다
밀라노 데 사이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.