Skonfigurowałem nową, pustą aplikację natywną.
Po zainstalowaniu kilku modułów węzłów dostałem ten błąd.
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)
Wiem, że jest to związane z brakiem miejsca na obserwowanie przez strażnika wszystkich zmian plików.
Chcę wiedzieć, jakie działania najlepiej podjąć w tym miejscu?
Czy powinienem zignorować node_modules
folder, dodając go do .watchmanconfig
?
react-native
watchman
Badis Merabet
źródło
źródło
Odpowiedzi:
Linux używa pakietu inotify do obserwowania zdarzeń systemu plików, pojedynczych plików lub katalogów.
Ponieważ React / Angular przeładowuje i ponownie kompiluje pliki przy zapisywaniu, musi śledzić wszystkie pliki projektu. Zwiększenie limitu obserwacyjnego inotify powinno spowodować ukrycie komunikatów ostrzegawczych.
Możesz spróbować edytować
źródło
Znaczenie tego błędu polega na tym, że liczba plików monitorowanych przez system osiągnęła limit !!
Wynik: wykonanie polecenia nie powiodło się! Lub wyślij ostrzeżenie (takie jak wykonanie kodu VSCode natywnego reagowania)
Rozwiązanie:
Zmodyfikuj liczbę plików monitorowania systemu
Ubuntu
sudo gedit /etc/sysctl.conf
Dodaj linię na dole
fs.inotify.max_user_watches=524288
Następnie zapisz i wyjdź!
sudo sysctl -p
żeby to sprawdzić
Wtedy jest rozwiązany!
źródło
Możesz to naprawić, zwiększając liczbę inotify obserwatorów.
Jeśli nie interesują Cię szczegóły techniczne i chcesz tylko posłuchać pracy:
Jeśli używasz Debiana, RedHata lub innej podobnej dystrybucji Linuksa, uruchom na terminalu następujące polecenie:
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Jeśli używasz ArchLinux, uruchom następującą komendę
$ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system
Następnie wklej go do swojego terminala i naciśnij Enter, aby go uruchomić.
Szczegóły techniczne
Listen używa domyślnie inotify w systemie Linux do monitorowania katalogów pod kątem zmian. Nierzadko zdarza się, że system ogranicza liczbę plików, które można monitorować. Na przykład limit inotify w Ubuntu Lucid (64-bitowy) jest ustawiony na 8192.
Możesz uzyskać aktualny limit obserwowania plików inotify, wykonując:
Jeśli ten limit nie jest wystarczający do monitorowania wszystkich plików w katalogu, należy go zwiększyć, aby funkcja Listen działała poprawnie.
Możesz ustawić nowy tymczasowy limit za pomocą:
Jeśli chcesz, aby Twój limit stał się stały, użyj:
Być może będziesz musiał zwracać uwagę na wartości
max_queued_events
imax_user_instances
jeśli będziesz słuchać, narzekaj.źródło
usuń reaguj node_modules
jeśli wystąpi błąd, użyj tej metody ponownie
źródło
Z oficjalnego dokumentu :
„Visual Studio Code nie może obserwować zmian plików w tym dużym obszarze roboczym” (błąd ENOSPC)
To powiadomienie oznacza, że w obserwatorze plików VS Code zabrakło uchwytów, ponieważ obszar roboczy jest duży i zawiera wiele plików. Aktualny limit można sprawdzić, uruchamiając:
cat /proc/sys/fs/inotify/max_user_watches
Limit można zwiększyć do maksimum poprzez edycję
i dodając tę linię na końcu pliku:
Nową wartość można następnie załadować, uruchamiając
Zwróć uwagę, że Arch Linux działa trochę inaczej, zobacz Zwiększanie liczby obserwatorów inotify, aby uzyskać szczegółowe informacje.
Podczas gdy 524288 to maksymalna liczba plików, które można oglądać, jeśli jesteś w środowisku, które jest szczególnie ograniczone pamięcią, możesz chcieć zmniejszyć tę liczbę. Każdy obserwowany plik zajmuje 540 bajtów (32-bitowy) lub ~ 1kB (64-bitowy), więc zakładając, że wszystkie 524288 zegarków jest zużytych, daje to górną granicę około 256 MB (32-bit) lub 512 MB (64-bit ).
polega na wykluczeniu określonych katalogów obszaru roboczego z monitora plików VS Code za pomocą ustawienia files.watcherExclude. Wartość domyślna files.watcherExclude wyklucza node_modules i niektóre foldery w .git, ale możesz dodać inne katalogi, których nie chcesz śledzić w VS Code.
źródło
Rozwiązałem ten problem za pomocą sudo ie
lub
źródło
sudo
nie jest przeznaczony do tego rodzaju zastosowań i może powodować inne problemy.Zdarzyło mi się to w przypadku aplikacji node, którą tworzyłem w dystrybucji opartej na Debianie. Po pierwsze, proste ponowne uruchomienie rozwiązało problem, ale stało się to ponownie w innej aplikacji.
Ponieważ jest to związane z liczbą obserwatorów, których inotify używa do monitorowania plików i wyszukiwania zmian w katalogu, musisz ustawić wyższą liczbę jako limit:
Udało mi się go rozwiązać z odpowiedzi zamieszczonej tutaj (dzięki niemu!)
Więc pobiegłem:
Przeczytaj więcej o tym, co się dzieje na https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details
Mam nadzieję, że to pomoże!
źródło
Jak już wskazał @snishalaka, możesz zwiększyć liczbę obserwatorów inotify.
Myślę jednak, że domyślna liczba jest wystarczająco wysoka i jest osiągnięta tylko wtedy, gdy procesy nie są prawidłowo oczyszczone. Dlatego po prostu ponownie uruchomiłem komputer zgodnie z propozycją w powiązanym problemie z githubem i komunikat o błędzie zniknął.
źródło
Proszę odnieść się do tego linku [1]. Kod programu Visual Studio wspomniał o krótkim wyjaśnieniu tego komunikatu o błędzie. Napotkałem również ten sam błąd. Dodanie poniższego parametru w pliku odpowiadającym rozwiązuje ten problem.
[1] https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
źródło
Napotkałem ten problem w dystrybucji linuxmint . Wydawało się, że stało się tak, gdy było tak wiele folderów i podfolderów / plików, które dodałem do folderu / public w mojej aplikacji. Zastosowałem tę poprawkę i zadziałało dobrze ...
$
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
zmień katalog na folder / etc:
cd /etc
następnie uruchom to:
sudo systcl -p
Być może będziesz musiał zamknąć terminal i
npm start
ponownie, aby zaczął działać.Jeśli to się nie powiedzie, zalecam zainstalowanie skryptów React-scripts na całym świecie i bezpośrednie uruchomienie aplikacji.
$
npm i -g --save react-scripts
wtedy zamiast
npm start
biegureact-scripts start
, aby uruchomić aplikację.źródło
Jeśli uruchamiasz projekt w Dockerze, powinieneś wykonać te
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
i wszystkie inne polecenia na maszynie hosta, ponieważ kontener odziedziczy to ustawienie automatycznie (i zrobienie tego bezpośrednio w nim nie zadziała).źródło
Późna odpowiedź i jest już wiele dobrych odpowiedzi.
Jeśli chcesz, aby prosty skrypt sprawdził, czy maksymalna liczba obserwowanych plików jest wystarczająco duża, a jeśli nie, zwiększ limit, oto jest:
#!/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
Skrypt zwiększa limit do
80000
, ale możesz ustawić limit, który chcesz.źródło
Po pierwsze, możesz uruchamiać się za każdym razem z uprawnieniami roota
sudo npm start
Lub możesz usunąć folder node_modules i użyć go
npm install
do ponownej instalacjilub możesz uzyskać trwałe rozwiązanie
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
źródło
Miałem ten sam problem, korzystając z biblioteki,
wifi
ale kiedy zmieniłem sieć, działało idealnie.Zmień połączenie sieciowe
źródło