Blog članak

Kako riješiti 'limit of file watchers reached' u Gatsbyju na Ubuntu ili Debianu

Povećajte Linux inotify limite kako biste riješili Gatsbyjevu grešku 'limit of file watchers reached' tijekom lokalnog developmenta na Ubuntu ili Debian sustavu.

Ovaj problem nastaje zbog načina na koji Gatsby.js radi, generira statičke datoteke i optimizira fotografije, pa vrlo lako premaši zadani Listen limit za broj datoteka koje Linux operativni sustav prati po direktoriju.

Naime, Linux za praćenje promjena datoteka u direktorijima koristi Listen inotify. Zato nije neobično naići na sistemsko ograničenje broja datoteka koje možete nadzirati. Primjerice, inotify limit na Ubuntu Lucidu 64-bit postavljen je na 8192.

Trenutačni limit vašeg sustava možete provjeriti naredbom:

cat /proc/sys/fs/inotify/max_user_watches

Kada zadani limit nije dovoljan za praćenje promjena u direktoriju, morate ga povećati kako bi Listen ispravno radio.

Novi privremeni limit možete postaviti naredbom:

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

Ako želite trajno promijeniti Listen limit, koristite naredbu:

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

Širi kontekst: Problem s inotify limitom nije isključivo Gatsbyjev — pogađa sve alate koji se oslanjaju na praćenje datoteka: webpack dev server, nodemon, VS Code i većinu frontend build alata. Gornji sysctl -w pristup mijenja limit odmah, ali se resetira nakon ponovnog pokretanja. Dodavanje postavke u /etc/sysctl.conf čini je trajnom. Pazite da ne postavite previsoku vrijednost — svaki watch troši ~1 KB kernel memorije, pa vrijednost od 524288 koristi otprilike 500 MB ne-swapabilne kernel memorije.

Ako i dalje imate problema s Listenom, provjerite i vrijednosti max_queued_events i max_user_instances.

Povezana područja

Ova su područja rada usklađena s temom članka i daju čišći prijelaz od edukativnog sadržaja do konkretne implementacije.

Nastavite čitati

Prvo po zajedničkim kategorijama, a zatim po najjačem preklapanju u tagovima.