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

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

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.


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.


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

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

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/
  }
};

-3

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.