Błąd Nodemon: Osiągnięto limit systemowy dotyczący liczby obserwatorów plików

103

Uczę się graphqli używam prisma-bindingdo operacji Graphql. Mam do czynienia z tym nodemonbłędem podczas uruchamiania mojego serwera węzłowego i daje mi ścieżkę do pliku schematu, który jest automatycznie generowany przez plik graphql-cli. Czy ktoś może mi powiedzieć, o co chodzi w tym błędzie?

Błąd:

Internal watch failed: ENOSPC: System limit for number of file watchers reached, watch '/media/rehan-sattar/Development/All projects/GrpahQl/graph-ql-course/graphql-prisma/src/generated
Rehan Sattar
źródło
To jest błąd linux ulimit, patrz tutaj stackoverflow.com/questions/34588/ ...
Janith
Próbowałem tego! Ponownie pojawia się ten sam błąd!
Rehan Sattar
2
Prawdopodobnie oglądasz za dużo plików. Może zawiera również katalog nod_modules?
Mikkel
node_modules są niezbędne, ponieważ są tam wszystkie pakiety. Próbowałem zabić poprzednie procesy działające na porcie mojego serwera, zadziałało to dla mnie, ale nie wiem, ile teraz to zajmie: D
Rehan Sattar

Odpowiedzi:

227

Jeśli używasz Linuksa, Twój projekt osiąga limit obserwatorów plików w Twoim systemie

Aby to naprawić, na swoim terminalu spróbuj:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Isac Moura
źródło
2
użyj sysctl --systemdo przeładowania dla nowszych systemów
YLJ
6
czy są jakieś inne implikacje, o których musimy wiedzieć, kiedy to robimy? Wiedziałem, że to pomaga rozwiązać problem, wypróbowałem to sam. Ale jestem trochę sceptyczny, jakie możliwe skutki uboczne może spowodować ta poprawka.
Aldee
@Aldee o technicznych konsekwencjach tej zmiany Polecam sprawdzenie tej wiki: github.com/guard/listen/wiki/ ...
Isac Moura
To również rozwiązało wiele problemów z wtyczkami npm. thx
The Bumpaster
3
Nie polecałbym zwiększać go tak bardzo, jeśli nie masz pewności, ile jest używanych. Sprawdź numer używany z następującymifind /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Nick Bull
23

Czasami pojawia się ten problem podczas pracy z VSCode na moim komputerze z systemem Ubuntu.

W moim przypadku pomocne jest następujące obejście:

zatrzymaj obserwatora, zamknij VScode, uruchom obserwatora, ponownie otwórz VSCode.

Juri Sinitson
źródło
Zgadza się! Z powodu VSCode. Powinien to być tryb automatycznego zapisywania.
Hùng Ng Vi
20

Musisz zwiększyć limit obserwatorów inotify dla użytkowników twojego systemu. Możesz to zrobić z wiersza poleceń za pomocą:

sudo sysctl -w fs.inotify.max_user_watches=100000

Będzie to jednak trwać tylko do momentu ponownego uruchomienia. Aby to było trwałe, dodaj plik o nazwie /etc/sysctl.d/10-user-watches.confz następującą zawartością:

fs.inotify.max_user_watches = 100000

Po dokonaniu powyższych (lub jakikolwiek inny) zmiany można przeładować ustawienia ze wszystkich plików konfiguracyjnych sysctl w /etcz sudo sysctl -p.

cjs
źródło
Dziękuję bardzo! Pracował dla mnie !! Ale gdzie muszę dodać ten plik?
Rehan Sattar
@RehanSattar Utwórz plik /etc/sysctl.d/10-user-watches.confi umieść w nim fs.inotify.max_user_watches = 100000.
cjs
Umieszczając to tutaj dla kompletności echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p.
RedHatter
2
użyj sysctl --systemdo przeładowania dla nowszych systemów
YLJ
4

W celu przetestowania zmian ustawiłem tymczasowo parametr na wartość 524288.

sysctl -w fs.inotify.max_user_watches=524288

następnie przystępuję do walidacji:

npm run serve

I problem został rozwiązany, aby uczynić go trwałym, należy spróbować dodać linię w pliku „/etc/sysctl.conf”, a następnie ponownie uruchomić usługę sysctl:

cat /etc/sysctl.conf |tail -n 2
fs.inotify.max_user_watches=524288

sudo systemctl restart systemd-sysctl.service
Manuel Lazo
źródło
Ta wskazówka do testu chwilowo jest bezcenna. Dziękuję
intmarinoreturn0
1

Trudno jest wiedzieć, o ile zwiększyć liczbę obserwatorów. Oto narzędzie do podwojenia liczby obserwatorów:

function get_inode_watcher_count() {
  find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | 
  xargs cat | 
  grep -c '^inotify'
}

function set_inode_watchers() {
  sudo sysctl -w fs.inotify.max_user_watches="$1"
}

function double_inode_watchers() {
  watcher_count="$(get_inode_watcher_count)"
  set_inode_watchers "$((watcher_count * 2))"

  if test "$1" = "-p" || test "$1" = "--persist"; then
    echo "fs.inotify.max_user_watches = $((watcher_count * 2))" > /etc/sysctl.d/10-user-watches.conf
  fi
}

# Usage
double_inode_watchers
# to make the change persistent
double_inode_watchers --persist
Nick Bull
źródło
0

Miałem ten sam problem, jednak mój pochodził z webpacka. Na szczęście udostępnili na swojej stronie świetne rozwiązanie :

W przypadku niektórych systemów oglądanie wielu plików może spowodować duże zużycie procesora lub pamięci. Możliwe jest wykluczenie dużego folderu, takiego jak node_modules, używając wyrażenia regularnego:

webpack.config.js

module.exports = {
  watchOptions: {
    ignored: /node_modules/
  }
};
szałwia
źródło
-3

W systemie Linux faktycznie korzystałem z sudo. sudo npm start

Fernando Silva Maransatto
źródło
5
To często zadziała, ponieważ root zwykle ma znacznie wyższy limit obserwowania inotify niż zwykli użytkownicy, ale bardzo złym pomysłem jest uruchamianie rzeczy jako root, kiedy nie muszą. Zobacz moją odpowiedź na to pytanie, aby dowiedzieć się, jak zmienić limit użytkowników.
cjs