Node.JS için yeni ve bir EMFILE hatası ile sıkışmış durumdayım. EMFILE istisnasını yakalamanın ve onu kod içinde işlemenin bir yolunun peşindeyim.Nasıl ulemit değiştirmeden nodejs EMFILE istisnası ele alınır?
"Hata: EMFILE, Çok fazla açık dosya" hatasıyla ilgili birçok soru var gibi görünüyor, ancak yanıtların çoğu "ulimitinizi artırın" satırları boyunca görünüyor.
İlk sorum şu, bu özel durumu nasıl yakalarım?
stream = net.createConnection(port, host);
stream.addListener('connect', function() {
return stream.write(request);
});
stream.addListener('data', function(data) {
return console.log(data);
});
stream.addListener('end', function() {
stream.end();
return callback();
});
stream.addListener('timeout', function() {
stream.destroy();
console.log("timeout");
return callback();
});
stream.addListener('error', function(e) {
console.log("this never gets called");
return
});
istisna 'hatası' dinleyici yakalanmış olmanın değildir: Ben birçok bağlantıları ile aşağıdaki kodu çalıştırdığınızda, EMFILE hata yükseltir. Yukarıdakileri try{} catch (e) {}
'da paketlemeye çalıştım ve hiçbir şey olmuyor. CreateConnection için geri arama yöntemi kullandım ve herhangi bir hata döndürmüyor. her şeyi yakalamak olduğu göz önünde bulundurulursa güvensiz görünüyor
process.on('uncaughtException', function(err) {
console.log(err);
});
:
Ben durum yakalamak mümkün olmuştur tek yolu
beraberdir.Ve ikinci sorum şu: Hatayı yakalamak ve aramayı yeniden denemek için "en iyi yöntemler" yolu nedir?
ben baktım: https://github.com/isaacs/npm/blob/master/lib/utils/graceful-fs.js ve referanslar olarak Simple nodejs http proxy fails with "too many open files" ama createConnection çağrısına NPM gelen zarif yöntemini nasıl uygulanacağını emin değilim.
Çok teşekkürler! Bu istisnayı yakalasanız bile, bu konuda yapabileceğiniz faydalı bir şey var mı?
Bu tür bir uygulama istisnasını ele almanın en iyi yolunu öğrenmenin bir aracı olarak istisnai durumları yakalamak istedim. Özellikle uygulama için, bir sonraki bağlantı ile bir dizi oluşturmayı bitirdim - bir bağlantı bittiğinde, diziden bir sonrakini çekti. – Moolio
işlem için kullanılabilir dosya tanımlayıcıların sayısını artırmak için, OSX – DTrejo
üzerinde 'ulimit -S -n 5000' çalıştırın, bu tür bir özel durumla başa çıkmak için en iyi yolun nedeni hata ayıklamak olduğunu söyleyebilirim. EMFILE (temelde dosyadaki bir dosya tanımlayıcısı sızıntısı), düzgün bir şekilde işlevsel kod içinde ortaya çıkması gereken bir istisna değildir (kodunuz gerçekten çok sayıda dosya açmıyorsa). Ben, '' try'/'catch' stratejilerini denemeden önce, nerede, nasıl ve neden sızıntının meydana geldiğini ayıklamak için' lsof' kullanmanızı öneririm. –