Node.js: ENOSPC Hatası nedir ve nasıl düzeltilir?


349

Node.js ve sunucuya dosya yükleme ile ilgili bir sorunum var. Dosyaları sunucuya yüklemek için bu eklentiyi kullanıyorum . Sunucuya dosya yüklemeye başlarken, Node.js işlemi çöktü ve hatayı göster:

Hata: ENOSPC.

Sunucu kodu çalışmaz.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  4.1G  3.5G  55% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  168K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
/dev/xvdf       9.9G  3.0G  6.5G  32% /vol
overflow        1.0M  1.0M     0 100% /tmp

1
"ENOSPC", sürücüde yer olmadığı anlamına gelir; bu nedenle dosyanızı nereye kaydedersiniz? veya belki / tmp dolu mu?
Jacob

/ Dev / xvda1 içine dosya kaydediyorum. Rm -rf / tmp / * yapabilir miyim?
Giffo

1
evet, ama ben çok Blu Angel cevap gibi başka bir konuma tmp-dir değiştirmek 1mb fileuploads için yeterli olduğunu düşünüyorum daha dont
Jacob A.

3
Kullanım durumunuz farklı olabilir, ancak burada başka bir SO sorusundan bu soruna harika bir çözüm .
Isaac Gregson

Bunun karşısında tökezleyen herkes için bu yanıta da göz atın . Grunt ve gulp kullanmak çok fazla saat kullanabilir, bu nedenle bu cevap bunu nasıl artıracağınızı detaylandırır.
Seiyria

Yanıtlar:


1273

ENOSPC'yi önlemek için aşağıdaki komutu çalıştırın:

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

Arch Linux için bu satırı şuraya ekleyin /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288

Sonra yürütün:

sysctl --system

Bu aynı zamanda yeniden başlatmalarda da devam edecektir. Teknik Detaylar Kaynak


25

2
Rastgele bir sayı değil. Kullanılan her bir inotify saati 540 bayt (32 bit sistem) veya 1 kB (çift - 64 bit) alır. Bu, silinemez olan çekirdek belleğinden çıkar. Bu nedenle, maks. Değeri 524288 olarak ayarladığınızı ve bunların hepsinin kullanıldığını (olanaksız) varsayarsak, yakl. 256 MB / 512 MB 32 bit / 64 bit çekirdek belleği.
Murali Krishna

Teorik olarak, yeterli RAM'e sahip olduğunuz sürece maksimum değer yoktur. Uygulamada, 524288 uygulamalar tarafından resmi olarak önerildi ve insanlar ekteki bellek kullanımı ile 2 milyona ayarladı.
Murali Krishna

Bu da sorunu çözmeme yardımcı oldu, ayrıca bu bağlantıyı github.com/guard/listen/wiki/… tüm detaylara sahiptir. Teşekkürler
amitsin6h

Başka kimse ortaya çıkan hatanın basit olduğunu garip buluyor ENOSPCmu? Neden çıktıdan hemen sonra bir açıklama yok ENOSPC - no space on drive? Elbette, bunun ne anlama geldiğini öğrendikten sonra hata kodu mantıklıdır ( E Rror NO SP a C e), ama neden sadece bu bilgileri ön plana çıkarmıyorsunuz?
Shadoninja

73

ENOSPC sürücüde yer olmadığı anlamına gelir.

Belki /tmpdolu mu? npmAyarlayarak farklı bir geçici klasör kullanmak üzere yapılandırabilir npm config set tmp /path/to/some/other/dirveya /tmpklasördeki her şeyi silebilirsiniz .

Kaynak: npm 1.1.21 yazamıyor, ENOSPC npm'in github repo'sunda.

Not Sorunumu yukarıdaki kaynakta açıklanan şekilde çözdüm. Ancak, daha kapsamlı olan Murali Krishna'nın aşağıdaki cevabına bakınız.


/ Tmp klasörünü temizledim ve npm temp klasörünü değiştirdim ancak aynı problemi yaşadım. npm config get tmpshow / vol / deploy / tmp
Giffo 18:30

tekrar çıkışını gösterebilir misin? Sonra değiştir dir
Blu

events.js:71 throw arguments[1]; // Unhandled 'error' event Error: ENOSPC, write
Giffo

1
hata dinleyiciniz var mı? bir tanesini yazıp sonra çıktıyı kontrol edin
Blu

72
yanlış, bu hata genellikle dosyaları izlerken geliştirici çalışma alanlarında oluşur (grunt / gulp ile). Bu, bir işlemin kaç dosyayı izleyebileceğinin (yerel saat) unix sınırıyla ilgilidir. Diğer cevap (echo fs.inotify.max_user_watches = 524288) bu durumlarda çözümdür.
Kanserbero


20

Sorunumu çözmenin basit bir yolu:

npm cache clear

npm veya onun tarafından kontrol edilen bir işlem çok fazla dosya izliyor. Derleme düğümündeki max_user_watches öğesinin güncellenmesi sonsuza kadar düzeltebilir. Debian için aşağıdakileri terminale koyun:

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

Nasıl inotify izleyici miktarını artırmak istiyorsanız sadece linke tıklayın.


2
forever,Dosyayı oluşturup .foreverignoreklasöre eklediğimde bu sorunu node_modules.
çözdüm

7

Makineyi yeniden başlatmak sorunu benim için çözdü. İlk olarak silmeyi denedim /tmp/ama düğüm hala şikayet ediyordu.


Sorun yeniden başlatıldıktan sonra geri döndü. Yapmak dedupeyardımcı oldu.
Parnab Sanyal

4

Linux'ta bu, dosya izleme sayısı için bir sınır olacaktır.

Geliştirme sunucusu inotify'ı sıcak yeniden yüklemeyi uygulamak için kullanır . İnotify API, geliştirme sunucusunun dosyaları izlemesine ve değiştiğinde bilgilendirilmesine izin verir.

Varsayılan inotify dosya izleme limiti dağıtımdan dağıtıma değişir (Fedora'da 8192). Geliştirme sunucusunun ihtiyaçları genellikle bu sınırı aşıyor.

En iyi yaklaşım, dosya izleme sınırını geçici olarak artırmayı denemek ve bundan memnunsanız kalıcı bir yapılandırma değişikliği yapmaktır. Ancak bunun yalnızca düğümün değil tüm sisteminizin yapılandırmasını değiştirdiğini unutmayın.

Mevcut sınırınızı görüntülemek için:

sysctl fs.inotify.max_user_watches

Geçici olarak yeni bir sınır belirlemek için:

# this limit will revert after reset
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p
# now restart the server and see if it works

Kalıcı bir sınır belirlemek için:

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

3

Ubuntu 18.04'te, iyonik / düğüm tarafından izlenen dosyayı yeniden etkinleştirmek için kullandığım bir numara denedim ve burada da çalışıyor. Bu, sistem conf dosyalarına erişimi olmayanlar için yararlı olabilir.

CHOKIDAR_USEPOLLING=1 npm start

2

Tüm izci kontrol süreçlerini öldürme sorunumu çözdüm (komut dosyası bir sunucuda çalışıyorsa, durumunuzu değil, GDM kullanıyorsanız deneyebilirsiniz)

tracker-control -r

Kurulumum: GNOME 3 ile Arch


1
Bunu belirtmeyi unuttum, evet, aynı durumdaydım: Arch + GNOME
Denys Vitali

2

/tmpBir linux dosya sistemindeki bağlantınız taşma olarak (genellikle 1 MB boyutunda) monte edilirse , bunun nedeni büyük olasılıkla /tmpkendi bölümü olarak belirtmemeniz ve kök dosya sisteminizin doldurulması ve /tmpyedek olarak yeniden takılmasıdır.

Alanı temizledikten sonra bunu düzeltmek için yedeklemeyi sökün ve orijinal noktasında yeniden takılmalıdır:

sudo umount overflow

2

ember serverKomutu çalıştırmayı denerken bu hatayla karşılaşırsanız lütfen rm -rf tmpdizin. Sonra ember stekrar çalıştırın . Bana yardımcı oldu.


2

Aynı hatayla karşılaşıyordum. Reactjs uygulamasını çalıştırırken. Ne yaptığım sadece node_modules klasörünü kaldırın ve node_modules yazın ve tekrar yükleyin. Bu hatayı kaldırır.


bu gerçekten işe yarıyor, neden düşürülüyor - soru bu. Ama sorunu çözüyor, başka neye ihtiyacınız var?
AlexNikonov

1
Bilmiyorum, İnsanların benimle bazı kişisel sorunları olabilir. hahaha
Ghayyas Mübarek

1

Benim için bir kullanıcının sahip olabileceği maksimum dosya sayısına ulaşmıştım

Numaralarınızı quota -sve dosyaların altındaki sayının kotaya çok yakın olmadığını kontrol edin


1

Bu çok garip geliyor, ancak evet, bir sistem yeniden başlatılır veya killall nodesorunu benim için çözer.


-15

Benim durumumda, linux üzerinde, sudoing sorunu çözdü.

Misal:

sudo gulp dev

5
Bu tehlikeli! Büyük olasılıkla başarılı olmuştur, çünkü çekirdek alanın belirli bir yüzdesi kök için ayrılmıştır, bu da temel sorunu ele almaz - ayrıcalıklı kullanıcı olarak (hedef konumda) kullanılabilir alan yok.
Liam Dawson

Sudo kullanmak bir şeylerin gerçekleşmesi için harika bir yoldur, ancak çoğu insan sudo kullanıldığında olan her şeyi anlamayı ihmal eder. Özellikle npm ve npm modülleriyle, sudo kullanmak, kullanıcının kök tarafından gerçekleştirilmesini istemediği, dosya oluşturma veya korumalı bağlantı noktalarının kullanımı gibi şeylerle sonuçlanabilir. Temel olarak, "sudo kullan" tavsiyesi nvm / npm / düğüm söz konusu olduğunda yüzüne düz bir şekilde düşer (belki bir an için tökezledikten ve güneşe baktıktan sonra).
bschlueter
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.