Mongoose: 4.7.1 => 4.7.2 : Waktu koneksi MongoError habis

Dibuat pada 9 Des 2016  ·  44Komentar  ·  Sumber: Automattic/mongoose

Saat menguji [email protected] / [email protected] , saya mendapatkan:

MongoError: koneksi 2 ke XXXXXX habis
di Function.MongoError.create (/node_modules/mongodb-core/lib/error.js:29:11)
di Soket.(/node_modules/mongodb-core/lib/connection/connection.js:186:20)
di Socket.g (events.js:286:16)
di emitNone (events.js:86:13)
di Socket.emit (events.js:185:7)
di Socket._onTimeout (net.js:333:8)
di tryOnTimeout (timers.js:224:11)
di Timer.listOnTimeout (timers.js:198:5)' } 'koneksi 2 ke XXXXXX habis

ini tidak terjadi dengan [email protected] / [email protected].

Keterangan lebih lanjut:

  • kueri: agregat dengan allowDiskUse(true).read('secondaryPreferred').cursor()
  • waktu: kesalahan terjadi sekitar 35 detik setelah mengirim kueri (sebelum hasil pertama diterima)
  • versi simpul: v6.3.0
  • versi npm: 3.10.9
  • menghubungkan pilihan:
{
 "socketOptions": {
    "socketTimeoutMS": 240000,
    "keepAlive": 10000,
    "connectTimeoutMS" : 30000
} 
  • pertanyaan:
[
    { $match: {
            _id: { $lt: oid },
            signature: { $exists: true }
        }
    },
    { $group: { 
            _id: { myid: '$myid', signature: '$signature' },
            count: { $sum:  1 },
            myid: { $first: '$myid' },
            docs: { $push: { _id: '$_id', name: '$name' } }
        }
    },
    { $match: {
            count: { $gt : 1 }
        }
    }
]
docs

Komentar yang paling membantu

Masalah ini belum terselesaikan untuk beberapa waktu sekarang.
Apa yang harus kita lakukan untuk memperbaiki ini?
Pada titik tertentu saya ingin memperbarui ke versi terbaru tetapi saya hanya dapat melakukannya ketika ini telah diselesaikan.

Semua 44 komentar

Saya mengalami masalah yang sama, [email protected] , [email protected]

  • mengatur socketTimeoutMS ke nilai yang lebih tinggi atau 0 tidak ada bedanya
  • pengaturan connectTimeoutMS ke nilai yang lebih tinggi atau 0 tidak ada bedanya
  • tidak ada acara "tutup" atau "terhubung kembali" yang diaktifkan, hanya "batas waktu", yang menghasilkan kesalahan Mongoose dalam panggilan balik

Mengembalikan ke [email protected] / [email protected] memecahkan masalah, yaitu, tidak menyebabkan batas waktu

Dari [email protected] menjadi 2.2.12 pendengar acara batas waktu berubah dari "sekali" menjadi "aktif", mungkin ini ada hubungannya dengan itu?

Atau haruskah kita memposting ini sebagai masalah di driver asli mongodb?

@silentjohnny Mendapatkan masalah yang sama dengan [email protected]

Saya akan memposting masalah di driver asli mongodb, luwak tidak banyak membantu koneksi awal.

Aneh. Saya mengalami masalah yang sama tetapi dengan [email protected] dan lebih tinggi yang menggunakan [email protected]
Dengan [email protected] dan [email protected] itu berhasil! .
Permintaan agregat saya tanpa opsi apa pun jadi saya tidak tahu, mungkin itulah perbedaan antara saya dan masalah asli @dcolens .

Adakah yang membuka masalah untuk driver asli? agar saya bisa mengikutinya...
Saat ini saya tinggal dengan [email protected]

[email protected] diperbarui ke [email protected] yang mencakup perbaikan untuk memantau waktu operasi habis dan menghasilkan acara batas waktu saat menjalankan operasi @1284917

Segera Mongoose memperbarui ke [email protected] , saya akan mencobanya.

Masalah yang sama untuk saya, dan saya bahkan tidak yakin apakah itu hanya agregat yang berjalan lama yang waktunya habis, atau apakah itu acak dan bukan waktu habis sama sekali. Sepertinya waktu hampir habis kadang-kadang, tetapi di lain waktu itu berjalan selama 30 detik atau lebih. Dalam kasus khusus ini, saya menjalankan empat agregat.execs sekaligus.

Mengembalikan ke [email protected] dan [email protected] memperbaikinya jadi saya melakukannya untuk saat ini.

Mudah-mudahan ini harus diperbaiki pada rilis berikutnya karena luwak 4.7.7 menggunakan [email protected]. Either way, ini bukan masalah luwak seperti yang dikatakan @vkarpov15 tetapi lebih berkaitan dengan mongodb. Saya akan menutup ini untuk saat ini, tetapi jika Anda masih mendapatkan masalah yang sama setelah rilis berikutnya, Anda harus membuka tiket atau PR di ujung mongodb.

Saya pikir mungkin ada lebih banyak masalah ini daripada yang terlihat. Saya harus kembali ke 4.4.20 untuk sepenuhnya menghentikan waktu tunggu agregat ini yang terjadi dalam semua keadaan. 4.7.x dan 4.6.x keduanya memiliki batas waktu palsu yang sangat cepat dalam beberapa keadaan beberapa eksekusi bersamaan. Saya melewatkan 4,5 dan langsung kembali ke versi bagus yang diketahui (4.4.20) yang kami gunakan dalam produksi, dan itu telah menyelesaikan masalah sepenuhnya, tetapi TBH saya masih bingung dengan apa yang terjadi. Maaf saya tidak memiliki data lebih lanjut untuk ditambahkan, tetapi saya tidak yakin apakah itu hanya masalah dengan versi driver mongodb asli yang digunakan luwak, atau jika ada lebih dari satu faktor penyumbang di tempat kerja .

Memiliki masalah yang sama dengan [email protected] dan [email protected]. Timeout benar-benar aneh. Yang ini cukup pendek (sekitar 5 detik) dan sangat dapat direproduksi tetapi kueri lain membutuhkan waktu lebih lama dari 5 detik dan tidak kehabisan waktu

Saya yakin batas waktu sering palsu. Dalam satu skenario yang saya lihat, saya memulai empat operasi agregat.exec simultan yang memakan waktu sekitar 30 detik. Satu time out dalam 8 detik, satu time out dalam 20 detik, tetapi dua lainnya selesai secara normal dalam 30 detik. Pengulangan menyebabkan urutan batas waktu yang berbeda, tetapi selalu hasil yang sama. Saya menduga batas waktu salah diatur pada koneksi yang salah, atau tidak dihapus ketika operasi selesai sehingga mereka menyala secara tak terduga pada exec berikutnya. Sesuatu seperti itu. Sayangnya saya tidak punya waktu saat ini untuk mengejarnya.

[email protected] tampaknya telah memecahkan batas waktu untuk saya. @steve-p-com seperti yang Anda sarankan, batas waktu di 4.7.2 memang palsu dan menyebabkan peristiwa kesalahan dipancarkan pada koneksi yang salah, ini diselesaikan oleh [email protected] dan [email protected] seharusnya bekerja dengan baik dalam kasus Anda. Apakah Anda menjalankan tes dengan versi itu?

Belum menguji 4.7.9 atau 4.8.0, mungkin [email protected] memperkenalkan regresi, yang akan menjelaskan masalah yang dialami @flosky . Apakah batas waktu itu juga terjadi pada [email protected]?

Saya telah menguji ulang dengan 4.8.1 hari ini, dan tidak memiliki masalah dengan batas waktu yang tidak terduga. Saya menghapus semua cache npm dan cache benang terlebih dahulu, lalu mengaktifkan node_modules, lalu menginstal ulang semuanya. Sejauh ini bagus.

Terjadi pada saya dengan 4.8.1 juga. Saya kembali ke banyak versi di Mongoose dan MongoDB dan mendapatkan masalah sepanjang waktu.

@thenitai apakah Anda memiliki lebih banyak konteks / dapatkah kami melihat bagaimana Anda mengatur koneksi mongoDB Anda?

@varunjayaraman Saya menemukan bahwa kode kesalahan domain kami menangkap kesalahan dan dengan demikian memulai ulang aplikasi kami. Namun, masalahnya masih ada.

Tidak yakin apa yang perlu Anda lihat dalam pengaturan koneksi kami. Apakah yang Anda maksud: pilihan koneksi Jika demikian, mereka adalah:

var dbOptions = {
            db: { native_parser: true },
            server: {
                auto_reconnect: true,
                socketOptions: {
                    keepAlive: 1, 
                    connectTimeoutMS: 300000,
                    socketTimeoutMS: 300000
                }
            }
        };

Saya punya masalah yang sama juga. bahkan dengan versi terbaru v4.8.4

baru saja menemukan masalahnya. dalam kasus saya, itu karena penggunaan memori server terlalu tinggi (selalu 95%~99%), setelah peningkatan memori, tidak ada masalah lagi.

Saya juga melihat masalah ini di server saya dengan Mongoose 4.7.7 , MongoDB 3.4.1 dan Node 4.7.2 . Ketika penggunaan memori tinggi di server saya, batas waktu tampaknya terjadi secara acak secara berurutan:

CosWebsite-27 MongoError: connection 42 to 127.0.0.1:27017 timed out
CosWebsite-27     at Function.MongoError.create (/home/cos/cos/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:29:11)
CosWebsite-27     at Socket.<anonymous> (/home/cos/cos/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:186:20)
CosWebsite-27     at Socket.g (events.js:260:16)
CosWebsite-27     at emitNone (events.js:67:13)
CosWebsite-27     at Socket.emit (events.js:166:7)
CosWebsite-27     at Socket.wrapped (/home/cos/cos/node_modules/newrelic/lib/transaction/tracer/index.js:183:28)
CosWebsite-27     at Socket.wrappedEmit [as emit] (/home/cos/cos/node_modules/newrelic/lib/transaction/tracer/index.js:220:46)
CosWebsite-27     at Socket._onTimeout (net.js:333:8)
CosWebsite-27     at _runOnTimeout (timers.js:537:11)
CosWebsite-27     at _makeTimerTimeout (timers.js:528:3)
CosWebsite-27     at Timer.unrefTimeout (timers.js:597:5)
... times 6
CosWebsite-27 GET /clans/compas-c-r-98QP9J2G/members 500 10569.300 ms - 9893
CosWebsite-27 GET /players/1000-99JQVQ9VU 500 12388.484 ms - 9849
CosWebsite-27 GET /players/R0YUPPRR/profile 500 8204.622 ms - 9857
CosWebsite-27 GET /players/UG8YJUJY/profile 500 4622.819 ms - 9857
CosWebsite-27 GET /clans/next-state-P8RYGQYV 500 11526.859 ms - 9861
CosWebsite-27 GET /clans/YY2CCUVV 500 6755.380 ms - 9817

Seperti yang Anda lihat, permintaan tidak ada permintaan yang bertahan lebih dari 12 detik. Konektor luwak saya diatur dengan cara ini:

const mongoDB = {
    uri: "mongodb://127.0.0.1:27017/XXX",
    options: {
        host: '127.0.0.1',
        port: '27017',
        database: "XXX",
        compression: false,
        server: {
            poolSize: 5,
            auto_reconnect: true,
            socketOptions: {
                socketTimeoutMS: 0,
                connectTimeoutMS: 0
            }
        },
        promiseLibrary: Promise
    }
};

Tahu apa yang bisa salah?

@adrienbaron Saya juga!!!
seseorang tolong bantu saya.

Apakah seseorang mengajukan laporan bug ke pengembang driver mongo asli?

apakah masalah ini masih ada di 4.9.1?

Ya, masalah masih ada di 4.9.1....

[email protected]
[email protected]
[email protected]

Punya masalah yang sama hari ini setelah memperbarui ke versi luwak terbaru, daripada saya menurunkan kembali ke 4.7.1 dan semuanya bekerja dengan sempurna!

Masalah ini belum terselesaikan untuk beberapa waktu sekarang.
Apa yang harus kita lakukan untuk memperbaiki ini?
Pada titik tertentu saya ingin memperbarui ke versi terbaru tetapi saya hanya dapat melakukannya ketika ini telah diselesaikan.

Saya memperbarui Mongoose dari 4.4.17 ke 4.7.9 sekitar sebulan yang lalu. Sejak itu cronjob harian telah error tiga kali sekarang, selalu dengan error timeout koneksi mongo.

Saya akan beralih ke Mongoose 4.7.1 dan melihat apakah ini membantu.

edit: pesan kesalahan

2017-04-19 03:09:23: You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
MongoError: connection 261 to localhost:27017 timed out
    at Function.MongoError.create (/var/www/someproject/node_modules/mongodb-core/lib/error.js:29:11)
    at Socket.<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/connection/connection.js:186:20)
    at Socket.g (events.js:286:16)
    at emitNone (events.js:86:13)
    at Socket.emit (events.js:185:7)
    at Socket._onTimeout (net.js:333:8)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)

@centigrade-thomas-becker Saya memiliki masalah yang sama selama lebih dari sebulan dalam produksi, saya beralih kembali ke 4.7.1 kemarin, tidak ada masalah lagi!

masalah yang sama terjadi @ 4.7.7

Dengan Mongo 4.7.1 ada lebih sedikit masalah dibandingkan dengan 4.7.9, tapi saya masih mendapatkan pesan kesalahan sesekali saat menyimpan ke MongoDB:

2017-04-30 03:09:32: Error: connection timeout
    at .<anonymous> (/var/www/someproject/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:168:17)
    at emitTwo (events.js:106:13)
    at emit (events.js:191:7)
    at listener (/var/www/someproject/node_modules/mongodb/lib/db.js:1791:14)
    at emitOne (events.js:96:13)
    at emit (events.js:188:7)
    at .<anonymous> (/var/www/someproject/node_modules/mongodb/lib/server.js:270:14)
    at g (events.js:286:16)
    at emitOne (events.js:96:13)
    at emit (events.js:188:7)
    at .<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/topologies/server.js:322:12)
    at emitOne (events.js:96:13)
    at emit (events.js:188:7)
    at .<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/connection/pool.js:271:12)
    at g (events.js:286:16)
    at emitTwo (events.js:106:13)
    at emit (events.js:191:7)
    at Socket.<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/connection/connection.js:175:10)
    at Socket.g (events.js:286:16)
    at emitNone (events.js:86:13)
    at Socket.emit (events.js:185:7)
    at Socket._onTimeout (net.js:333:8)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)

Kesalahan terjadi pada VM Linux yang menjalankan Ubuntu 15.04

Sama di sini dengan:

├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]

versi mongo @ 3.2.11

pada AWS EC2.

Ada pembaruan/solusi? Apakah keepAlive: true memiliki efek positif?

Tidak yakin apakah ini membantu siapa pun, tetapi dalam kasus kami, kami memperhatikan bahwa kami melewati parameter batas waktu kami ( socketTimeoutMS dll) melalui options.server . Ini _salah_! Kami menggunakan set replika dan karena itu opsi kami harus seperti di bawah ini:

Dalam kasus kami, aplikasi sebenarnya membutuhkan kemampuan untuk terhubung ke replika atau server normal, jadi kami melakukannya:

const serverOptions = {
  poolSize: 100,
  socketOptions: {
    socketTimeoutMS: 60000
  }
};

mongoose.createConnection(dbpath, {
  server: serverOptions,
  replset: serverOptions
});

Harapan yang membantu seseorang!

Halo semuanya,
Saya menggunakan mlab untuk meng-host database saya. Saya mendapatkan kesalahan ini
Kesalahan koneksi DB Mongo: {[MongoError: koneksi 0 ke ds155841.mlab. com:xxxxx habis waktu'}

@RemeAjayi Saya pikir ini tidak ada hubungannya dengan tiket ini.
Anda harus mencoba/membuat yang lain setelah menggali masalah.

@ht2 kamu menyelamatkan hariku ❤️

Apakah ada solusi yang layak untuk masalah asli?

Jika ini membantu siapa pun, saya mengalami masalah ini ketika memparalelkan 2 kueri find() brutal (menggunakan pola Janji).

Memutar

Promise.all([
  col1.find({longQuery: true}),
  col2.find({longQuery: true})
])
.spread(function(result1, result2) {
  //stuff
});

menjadi pendekatan sekuensial

col1.find({longQuery: true})
.then(function(result1) {
  return Promise.all([
    result1,
    col2.find({longQuery: true})
  ]);
})
.spread(function(result1, result2) {
  //stuff
});

Berhasil

@cyrilchapon mengira itu berhasil untuk saya tetapi pendekatan berurutan Anda tidak menyelesaikan masalah saya:/

terputus-putus.. kadang-kadang berhasil, kadang-kadang mati..

Mengapa diam dekat ini?

Tindak lanjut dari komentar saya sebelumnya https://github.com/Automattic/mongoose/issues/4789#issuecomment -298849907

Saya memindahkan database yang menyinggung dari mesin virtual ke wadah buruh pelabuhan dengan linux baru, nodeJS dan mongoDB. Saya membuat tes stres yang tidak melakukan apa pun selain memotong dan mengisi ulang basis data sepanjang hari. Saya menemukan bahwa sekitar 1 dari 6000 uji coba menghasilkan kesalahan batas waktu.

Saya kira pengalaman yang sama setelah komentar terakhir saya, lupa menyebutkan.

Tetapi memperbarui node ke salah satu versi terbarunya bersama dengan semua deps lainnya tampaknya berhasil.

Sekarang dengan komentar di atas saya percaya ini adalah masalah kesalahan warisan

Saya juga mengalami masalah yang sama dengan mongo 3.6.2 dan mongoose 4.9.2
Saya memperbaikinya dengan memberikan parameter koneksi tambahan

MONGO_URI=mongodb://user:[email protected]:27017/dbname?keepAlive=true&poolSize=30&autoReconnect=true&socketTimeoutMS=360000&connectTimeoutMS=360000

@mzahidriaz Terima kasih banyak, solusi Anda berhasil untuk saya, tetapi dapatkah Anda menjelaskan atau merujuk tautan ke bagaimana Anda memilih parameter tersebut untuk menyelesaikan masalah ini?

@MinhNguyen41092 sekarang satu-satunya dokumen adalah dokumen driver MongoDB http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#connect . kami akan menambahkan detail tentang ini ke http://mongoosejs.com/docs/connections.html

Bagi mereka yang mengalami kesalahan intermiten, saya juga memilikinya di luwak-4.13.11 dengan mongodb-2.2.35 mongodb-core-2.1.19 di lingkungan tertentu. Berbagai kueri di berbagai titik di testsuite kami, meskipun sebagian besar menguji satu bagian tertentu dari aplikasi kami yang memiliki kueri lebih berat dan melakukan hal-hal secara paralel IIRC, semuanya mendapatkan pesan kesalahan ini. Dan seluruh rangkaian pengujian bahkan tidak membutuhkan waktu 15 detik untuk dijalankan, jadi tidak mungkin saya harus mencapai batas waktu default 30-an bawaan sejak awal:

     MongoError: connection 0 to localhost:27017 timed out
      at Function.MongoError.create (node_modules/mongoose/node_modules/mongodb-core/lib/error.js:29:11)
      at Socket.<anonymous> (node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:200:20)
      at Socket._onTimeout (net.js:448:8)

Ini hanya terjadi di server pembuatan uji CI kami. Saya tidak dapat mereproduksinya di mesin dev saya.

(Dalam sistem saya sendiri (repo pribadi, ini untuk referensi saya sendiri jika perlu menggali ini lagi), kesalahan ini muncul setidaknya dalam nomor build adalah 358, 356, 355, 352).

Setelah menyalakan useMongoClient: true , tes tampaknya lulus dengan andal di lingkungan CI sejauh ini. Saya telah memiliki tiga proses yang berhasil hanya dengan perubahan itu sedangkan banyak proses berurutan sebelumnya gagal karena kesalahan batas waktu yang aneh.

Saya pikir @thenitai @steve-p-com @adrienbaron juga mengalami timeout palsu yang aneh. Saya pikir kesalahan itu terjadi pada kalian sebelum 4.11 keluar yang bahkan membawa useMongoClient: true sebagai opsi. Bisakah Anda memberi tahu apakah itu membuat perbedaan untuk beban kerja Anda?

[email protected]
[email protected]
[email protected]
Memiliki masalah yang sama, kesalahan 1,5 juta di roll bar selama beberapa hari, dengan apa yang dapat dihubungkan? Bagaimana menyelesaikan?
screen shot 2019-02-25 at 2 53 37 pm
screen shot 2019-02-25 at 2 54 01 pm
screen shot 2019-02-25 at 2 55 27 pm

@SergeyVatz lihat tanggapan atas pertanyaan Anda di #5376

Apakah halaman ini membantu?
0 / 5 - 0 peringkat