React Native Error: ENOSPC: Dosya izleyici sayısı için sistem sınırına ulaşıldı


129

Yeni bir boş tepki yerel uygulaması kurdum.

Birkaç düğüm modülünü kurduktan sonra bu hatayı aldım.

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)

Bekçinin tüm dosya değişikliklerini izleyebileceği yeterli alan olmadığının farkındayım.

Burada yapılacak en iyi hareket tarzının ne olduğunu bilmek istiyorum.

node_modulesKlasörü ekleyerek yok saymalı mıyım .watchmanconfig?


21
ASLA kod, hata veya çıktı resimlerini göndermeyin! stackoverflow.com/help/how-to-ask
Rob

Metro.config.js arka listesine kodun bir kısmını eklemeyi düşündünüz mü? Bu, tarama hacmini
azaltmalıdır

Yanıtlar:


223

Linux, dosya sistemi olaylarını, tek tek dosyaları veya dizinleri gözlemlemek için inotify paketini kullanır .

React / Angular, dosyaları kaydederken yeniden yükleyip yeniden derlediğinden, tüm proje dosyalarını takip etmesi gerekir. Bilgilendirme izleme sınırının artırılması, uyarı mesajlarını gizlemelidir.

Düzenlemeyi deneyebilirsin

# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches

# config variable name (not runnable)
fs.inotify.max_user_watches=524288

36
Bu, sorunun ne olduğunu, çözümün ne olduğunu veya çözümün sorunu nasıl çözdüğünü açıklamaz.
Yerli Coder

2
vay, yukarıda yazıldığına benzer bir sorunla karşılaştım, ancak bu çözüm% 100 çözdü. teşekkür ederim
akolliy

3
Daha fazlasına izin vermek yerine izleyicileri nasıl elimizden alırız?
Jonathan

2
Çalışıyor ama bunu doğru okursam sınırı yükseltir. Bunun yerine açılmış izleyicileri kapatabileceğim bir yol var mı?
zozo

1
@NativeCoder yeni baskı bu sorunu çözecek mi?
zardilior

147

Bu hatanın anlamı, sistem tarafından izlenen dosya sayısının sınıra ulaşmış olmasıdır !!

Sonuç: Yürütülen komut başarısız oldu! Veya bir uyarı (react-native start VSCode çalıştırma gibi) verin

Çözüm:

Sistem izleme dosyalarının sayısını değiştirin

Ubuntu

sudo gedit /etc/sysctl.conf

Alta bir çizgi ekleyin

fs.inotify.max_user_watches=524288

Sonra kaydedin ve çıkın!

sudo sysctl -p

kontrol etmek için

Sonra çözüldü!


teşekkürler bu masaüstü kullananlar için daha kolay
tgkprog

Hey, bu benim durumumda çözüldü. Ayrıca yayınımda paylaştı. Teşekkürler
Rashid Khan

56

İzleyicilerin inotify sayısını artırarak düzeltebilirsiniz .

Teknik detaylarla ilgilenmiyorsanız ve sadece iş dinleyin:

  • Debian, RedHat veya başka bir benzer Linux dağıtımını çalıştırıyorsanız, aşağıdakileri bir terminalde çalıştırın:

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

  • ArchLinux çalıştırıyorsanız, bunun yerine aşağıdaki komutu çalıştırın

    $ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Ardından terminalinize yapıştırın ve çalıştırmak için enter tuşuna basın.


Teknik Detaylar

Listen, değişiklikler için dizinleri izlemek için Linux'ta varsayılan olarak inotify kullanır. İzleyebileceğiniz dosya sayısında bir sistem sınırıyla karşılaşmak nadir değildir. Örneğin, Ubuntu Lucid'in (64bit) inotify sınırı 8192 olarak ayarlanmıştır.

Geçerli inotify dosyası izleme sınırınızı aşağıdaki komutu kullanarak alabilirsiniz:

$ cat /proc/sys/fs/inotify/max_user_watches

Bu sınır, bir dizindeki tüm dosyaları izlemek için yeterli olmadığında, Dinle'nin düzgün çalışması için sınır artırılmalıdır.

Aşağıdakilerle yeni bir sınır geçici olarak ayarlayabilirsiniz:

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

Limitinizi kalıcı hale getirmek istiyorsanız, şunu kullanın:

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

Aynı zamanda değerlerine de dikkat etmeniz max_queued_eventsve max_user_instanceseğer dinleme şikayet etmeye devam etmeniz gerekebilir .


2
Vay canına, çok teşekkür ederim, bu, projem büyüdükçe React JS ile benzer bir hata için sorunumu çözdü, ancak hatanın içini ve dışını anlayamadım. Bu doğru bir cevap, iyi günler
Pierre Chevallier

4
bazılarının bunun için daha iyi bir düzeltme yapması gerekiyor. Bir el dolusu bağımlılıkla yeni bir projeye başlarken böyle bir şey yapmak zorunda kalmamalıyım.
Patrick W. McMahon

Detaylı cevabınız için teşekkür ederiz! Bana çok yardımcı oldu. React Native'i geliştiriyorum, aslında RN cli daha fazla değer gerektiriyor. Dolayısıyla yukarıdaki komutlarla başarılı bir şekilde değiştiriyorum. Merak ediyorum da yüksek değerinin performansı ve bellek kullanımını kötü bir şekilde etkileyip etkilemeyeceğini merak ediyorum.
moondaddi

8

react node_modules'i sil

rm -r node_modules

yarn or npm install

yarn start or npm start

hata oluşursa bu yöntemi tekrar kullanın


Bu neden işe yarıyor? İzlenen dosyaların sayısını azaltırsa, gerekli bağımlılıkları yeniden yüklemek dosyaları geri eklemiyor mu?
icedwater

2
@icedwater node_modules'in silinmesi, React'in üzerinde saat olmadan yeni bir inotify örneği oluşturmasına neden olur. Muhtemelen React'te inotify örneklerinin doldurulmasına neden olan bir sızıntı vardır, bu nedenle hata ilk etapta görünür.
Hesabı Atın

7

Gönderen resmi belgede :

"Visual Studio Code, bu büyük çalışma alanındaki dosya değişikliklerini izleyemiyor" (ENOSPC hatası)

Bu bildirimi gördüğünüzde, VS Code dosya izleyicisinin tutamaçları tükendiğini gösterir çünkü çalışma alanı büyüktür ve birçok dosya içerir. Mevcut sınır şu şekilde görüntülenebilir:

cat /proc/sys/fs/inotify/max_user_watches

Sınır, düzenleyerek maksimuma yükseltilebilir

/etc/sysctl.conf

ve bu satırı dosyanın sonuna eklemek:

fs.inotify.max_user_watches = 524288

Yeni değer daha sonra çalıştırılarak yüklenebilir.

sudo sysctl -p

Arch Linux'un biraz farklı çalıştığını unutmayın.Ayrıntılar için bkz.

524.288, izlenebilecek maksimum dosya sayısı olsa da, özellikle bellek kısıtlı bir ortamdaysanız, sayıyı düşürmek isteyebilirsiniz. Her dosya izleme 540 bayt (32-bit) veya ~ 1kB (64-bit) yer kaplar, bu nedenle 524.288 saatin tamamının kullanıldığını varsayarsak, bu da 256MB (32-bit) veya 512MB (64-bit) üst sınırla sonuçlanır. ).

Başka seçenek

files.watcherExclude ayarıyla belirli çalışma alanı dizinlerini VS Code dosya izleyicisinden dışlamaktır. Files.watcherExclude için varsayılan node_modules ve .git altındaki bazı klasörleri hariç tutar, ancak VS Code'un izlemesini istemediğiniz diğer dizinleri ekleyebilirsiniz.

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

7

Bu sorunu sudo ie kullanarak çözdüm

sudo yarn start

veya

sudo npm start

5
Bu komutlar soruyu çözebilirken, sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere , gönderinizin kalitesini artırmaya gerçekten yardımcı olur ve muhtemelen daha fazla oylama ile sonuçlanır. Sadece şimdi soran kişi için değil, gelecekte okuyucular için soruyu yanıtladığınızı unutmayın. Açıklamalar eklemek ve hangi sınırlamaların ve varsayımların geçerli olduğuna dair bir gösterge vermek için lütfen cevabınızı düzenleyin .
Brian

Bu şimdiye kadar herhangi bir konfigürasyonu değiştirmeden en basit çözümdü, ancak @ Brian'ın dediği gibi, bir referans veya açıklama etkili bir şekilde yardımcı olacaktır.
Genius

1
Bu en kötü çözüm. sudobu tür bir kullanım için tasarlanmamıştır ve başka sorunlara da neden olabilir.
Igor Parra

2

Debian tabanlı bir dağıtımda geliştirdiğim bir düğüm uygulamasıyla başıma geldi. İlk olarak, basit bir yeniden başlatma sorunu çözdü, ancak başka bir uygulamada tekrar oldu.

Bu, inotify'ın dosyaları izlemek ve bir dizindeki değişiklikleri aramak için kullandığı izleyici sayısı ile ilişkili olduğundan, sınır olarak daha yüksek bir sayı belirlemeniz gerekir:

Burada verilen cevaptan çözebildim (onun sayesinde!)

Ben de koştum:

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

Https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details adresinde neler olduğu hakkında daha fazla bilgi edinin.

Umarım yardımcı olur!


Manjaro'da harika çalışıyor!
Omar Dulaimi

1

@Snishalaka tarafından daha önce belirtildiği gibi, inotify izleyenlerin sayısını artırabilirsiniz.

Ancak, bence varsayılan sayı yeterince yüksek ve yalnızca işlemler düzgün bir şekilde temizlenmediğinde ulaşılıyor. Bu nedenle, ilgili bir github sorununda önerildiği gibi bilgisayarımı yeniden başlattım ve hata mesajı kayboldu.


0

Bu sorunla bir linuxmint dağıtımında karşılaştım. Uygulamamdaki / public klasörüne eklediğim çok sayıda klasör ve alt klasör / dosya varken meydana gelmiş gibi görünüyordu. Bu düzeltmeyi uyguladım ve iyi çalıştı ...

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

dizini / etc klasörüne değiştirin: cd /etc

sonra şunu çalıştırın: sudo systcl -p

npm startÇalışması için terminalinizi kapatıp tekrar kapatmanız gerekebilir .

Bu başarısız olursa, global olarak react-scripts kurmanızı ve uygulamanızı doğrudan bununla çalıştırmanızı öneririm.

$ npm i -g --save react-scripts

ardından uygulamanızı npm startçalıştırmak react-scripts startiçin çalıştırmak yerine .



-1
  1. Öncelikle her seferinde root ayrıcalıklarıyla çalıştırabilirsiniz

    sudo npm başlangıcı

  2. Veya node_modules klasörünü silebilir ve npm installtekrar yüklemek için kullanabilirsiniz

  3. veya kalıcı çözüm elde edebilirsiniz

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


-5

Kitaplığı kullanırken de aynı sorunu yaşadım wifiama ağımı değiştirdiğimde mükemmel çalıştı.

Ağ bağlantınızı değiştirin


1
Bu bir yorum olabilirdi
Milan Desai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.