SORU
11 Ocak 2011, Salı


Node.js, özellik listesi ve Yuva.ıo bir bara girmiş. Node.js ENOBUFS ve herkes ölür atar

Biri burada, büyük şans ben kendim bu işi çözmek zorunda değilim bana yardımcı olabilir umuyorum. Özellik listesi sürüm 0.3.1 node.js koşuyorum. Bağlayın ve Soket kullanıyorum.ıo. Rastgele sorunları DNS ile falan, tam karar vermedim yaşıyorum. Sonuçta ben sunucu güzel, ama bir tarayıcı bağlanmaya çalıştığında ilk HTTP İsteği çalışır, Yuva çalışıyor.ıo ve sunucu öldü (çıktısı) bağlanır.

Onu öldüren server çok fazla veri gönderildi alır ve isteklerini almak ve bağlantımı kadar yanıt olduğu için HTTP isteği ile ne ilgisi olduğunu sanmıyorum. Etrafında Google'da tarattım ve buldum en yakın DNS yanlış ayarlanmış. Bir ağ programı dahili bir ağ üzerinde çalıştırmak için tasarlanmıştır,* *5 iç DNS için benim içinde nameserver x.x.x.x dizi. Ayrıca ek olarak nameserver 8.8.8.8 ekledim. Kontrol etmek için ne emin değilim, ama herhangi bir yardım için minnettar olacaktır.

node.exe.stackdump*

Exception: STATUS_ACCESS_VIOLATION at eip=610C51B9
eax=00000000 ebx=00000001 ecx=00000000 edx=00000308 esi=00000000 edi=010FCCB0
ebp=010FCAEC esp=010FCAC4 program=\\?\E:\cygwin\usr\local\bin\node.exe, pid 3296, thread unknown (0xBEC)
cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame     Function  Args
010FCAEC  610C51B9  (00000000, 00000000, 00000000, 00000000)
010FCBFC  610C5B55  (00000000, 00000000, 00000000, 00000000)
010FCCBC  610C693A  (FFFFFFFF, FFFFFFFF, 750334F3, FFFFFFFE)
010FCD0C  61027CB2  (00000002, F4B994D5, 010FCE64, 00000002)
010FCD98  76306B59  (00000002, 010FCDD4, 763069A4, 00000002)
End of stack trace

Düğüm, Çıkış:

    node.js:50
    throw e; // process.nextTick error, or 'error' event on first tick
    ^
Error: ENOBUFS, No buffer space available
    at doConnect (net.js:642:19)
    at net.js:803:9
    at dns.js:166:30
    at IOWatcher.callback (dns.js:48:15)

EDİT

ENOBUFS neden olan bir LDAP sunucu hemen bir müşteri sorunu olduğu gibi bu bilgi ve almak için bağlandıktan sonra http.createClient kullanarak basıyorum. Şimdi ölmek üzere, sunucu engeller kaynağı to include && errno != ENOBUFS düzelttim, ancak şimdi LDAP isteği işe yaramıyor. Sorun olsa neden olacak ne olduğundan emin değilim. Bu iç sadece bir uygulamadır belirtildiği gibi, bu yüzden DNS /etc/resolv.conf DNS sunucusu ana makine uygulanmakta olan sunucular kurdum. Eğer bu sorunun bir parçası olup olmadığından emin değil mi?

2 DÜZENLEYİN

İşte gdb --args ./node_g --debug ../myscript.js bazı çıkış. Soket ile hemen sonra bağlantı kesme gibi görünüyor gibi bu ENOBUFS ile ilgili ise kesin ki değilim.ıo

    [New thread 672.0x100]
Error: dll starting at 0x76e30000 not found.
Error: dll starting at 0x76250000 not found.
Error: dll starting at 0x76e30000 not found.
Error: dll starting at 0x76f50000 not found.
[New thread 672.0xc90]
[New thread 672.0x448]
debugger listening on port 5858
[New thread 672.0xbf4]
14 Jan 18:48:57 - socket.io ready - accepting connections
[New thread 672.0xed4]
[New thread 672.0xd68]
[New thread 672.0x1244]
[New thread 672.0xf14]
14 Jan 18:49:02 - Initializing client with transport "websocket"
assertion "b[1] == 0" failed: file "../src/node.cc", line 933, function: ssize_t
 node::DecodeWrite(char*, size_t, v8::Handle<v8::Value>, node::encoding)

Program received signal SIGABRT, Aborted.
0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
   from /cygdrive/c/Windows/system32/ntdll.dll
(gdb) backtrace
#0  0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
   from /cygdrive/c/Windows/system32/ntdll.dll
#1  0x7724f861 in ntdll!RtlUpdateClonedSRWLock ()
   from /cygdrive/c/Windows/system32/ntdll.dll
#2  0x75030816 in WaitForSingleObjectEx ()
   from /cygdrive/c/Windows/syswow64/KernelBase.dll
#3  0x0000035c in ?? ()
#4  0x00000000 in ?? ()
(gdb)

CEVAP
14 Ocak 2011, Cuma


TAMAM, biraz ben kazmış ve ikinci düzenledikten sonra sorun listesinde this bug buldum.

Bu özellik listesi Ya, ama neden bu kod parçası için aşağı vurmak bu hata değil: altında karşılaştı olup olmadığını devlet değil

  uint16_t * twobytebuf = new uint16_t[buflen];

  str->Write(twobytebuf, 0, buflen, String::HINT_MANY_WRITES_EXPECTED);

  for (size_t i = 0; i < buflen; i  ) {
    unsigned char *b = reinterpret_cast<unsigned char*>(&twobytebuf[i]);
    assert(b[1] == 0); // this assertion fails
    buf[i] = b[0];
  }

Ne okuyabiliyorum (benim paslı C) olacaktır dönüştürür yeni bir uin16 dizi ve yazma içeriğinin V8 dize kendi, sonra emin olun döküm vermedi yazmak dışında herhangi bir değer aralığı 0 - 255 ve işte burada başarısız olur.

Bu V8 bir sorun olup olmadığı ile ilgili bir şey bulamadım.

Kodu this commit, eklendi beri burada önereceğim tek şey bir ağacı çekmeye çalışmaktırkod eklendi önce işlemek. Bundan sonra tüm sürümleri beri çökmesini kodu.

Eğer bu işe yararsa, bunu yaptım, ancak sorun node.js sorun listede bir hata raporu dosyası, daha sonra bu gün tavsiye ederim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • pain975

    pain975

    27 NİSAN 2008
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012
  • SPBedition

    SPBedition

    24 HAZİRAN 2013