1. 증상
React 프로젝트를 개발할 때, yarn start
로 로컬에 UI 를 띄워서 “코드 수정 -> 화면 확인 -> 코드 수정 -> 화면 확인 -> … “ 를 반복하다보면, 간혹 다음과 같은 에러가 발생하며 화면을 강력 새로고침해도 해결되지 않고, 컴파일조차 되지 않는 경우가 발생하는 경우가 있습니다.
Error: ENOSPC: System limit for number of file watchers reached, watch '/특정 로컬 경로'
2. 해결
문제 해결이 급하신 분들을 위해 해결 방법을 먼저 말씀드리면 다음과 같습니다. 원인을 간략하게만 말씀드리면, “일을 너무 열심히 해서 컴퓨터가 버티지 못했다…“라고만 알아두시면 될 것 같습니다.
해결 방법은 단순히 다음 커맨드를 터미널에 입력하시면 앞으로 동일한 에러는 99 % 발생하지 않게 됩니다. 자세한 원인이 궁금하다면 3. 원인을 먼저 읽고 다음 커맨드를 입력하시는 것을 추천합니다.
- 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
3. 원인
gatsby github issue, listen github wiki 의 설명에 따르면 자세한 원인은 다음과 같습니다.
yarn start
등을 통해 React web app 을 실행시킨 경우, React 프로젝트의 소스코드를 로컬에서 수정하면 바로바로 UI 에 반영되는 것은 해당 프로젝트의 file 들을 watch 하며 변화를 감지하기 때문입니다.
그런데 계속 소스코드를 수정하다보니 watch(감시)하는 file(inotify)이 점점 많아지다가, OS kernel 에서 default 로 설정해놓은 감시 가능한 파일의 max limit(fs.inotify.max_user_watches
)을 초과하면 이런 에러가 발생하는 것입니다.
따라서 로컬의 감시 가능한 파일의 max limit(fs.inotify.max_user_watches
)을 더 크게 설정해버리면 쉽게 해결 가능하며, 위의 커맨드가 이 역할을 하는 것입니다.
로컬의 default limit 이 몇인지 궁금하다면 다음 커맨드로 확인하실 수 있습니다.
$ cat /proc/sys/fs/inotify/max_user_watches