Mongoose: 4.7.1 => 4.7.2: انتهت مهلة اتصال MongoError

تم إنشاؤها على ٩ ديسمبر ٢٠١٦  ·  44تعليقات  ·  مصدر: Automattic/mongoose

عند اختبار [email protected] / [email protected] ، أحصل على:

MongoError: انتهت مهلة الاتصال 2 بـ XXXXXX
في Function.MongoError.create (/node_modules/mongodb-core/lib/error.js:29:11)
في المقبس.(/node_modules/mongodb-core/lib/connection/connection.js:186:20)
في Socket.g (events.js: 286: 16)
في emitNone (events.js: 86: 13)
في Socket.emit (events.js: 185: 7)
في Socket._onTimeout (net.js: 333: 8)
في tryOnTimeout (timers.js: 224: 11)
في Timer.listOnTimeout (timers.js: 198: 5) '}' انتهت مهلة الاتصال 2 بـ XXXXXX

لم يحدث هذا مع [email protected] / [email protected].

المزيد من التفاصيل:

  • الاستعلام: تجميع مع allowDiskUse (صحيح) .read ('SecondaryPreferred'). cursor ()
  • التوقيت: يحدث الخطأ بعد حوالي 35 ثانية من إرسال الاستعلام (قبل استلام النتائج الأولى)
  • إصدار العقدة: v6.3.0
  • إصدار npm: 3.10.9
  • خيارات الاتصال:
{
 "socketOptions": {
    "socketTimeoutMS": 240000,
    "keepAlive": 10000,
    "connectTimeoutMS" : 30000
} 
  • استفسار:
[
    { $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

التعليق الأكثر فائدة

ظلت المشكلة دون حل لبعض الوقت الآن.
ماذا يجب ان نفعل لإصلاح هذا؟
في مرحلة ما ، أود التحديث إلى الإصدار الأخير ولكن لا يمكنني القيام بذلك إلا بعد حل هذه المشكلة.

ال 44 كومينتر

أواجه نفس المشكلة ، [email protected] ، [email protected]

  • ضبط socketTimeoutMS على قيم أعلى أو 0 لا يحدث فرقًا
  • ضبط connectTimeoutMS على قيم أعلى أو 0 لا يحدث فرقًا
  • لم يتم تشغيل حدث "إغلاق" أو "معاد الاتصال" ، فقط "مهلة" ، مما ينتج عنه خطأ النمس في رد الاتصال

التراجع إلى [email protected] / [email protected] يحل المشكلة ، أي لا يتسبب في انقضاء المهلات

من [email protected] إلى 2.2.12 تم تغيير مستمع حدث المهلة من "مرة واحدة" إلى "تشغيل" ، فربما يكون لهذا علاقة به؟

أم ينبغي علينا نشر هذا كقضية في برنامج التشغيل الأصلي mongodb؟

silentjohnny الحصول على نفس المشكلة مع [email protected]

أود أن أنشر مشكلة في برنامج التشغيل الأصلي mongodb ، فالنمس لا يفعل الكثير في طريق الاتصال الأولي.

غريب. أواجه نفس المشكلة ولكن مع [email protected] والإصدارات الأحدث التي تستخدم [email protected]
مع [email protected] و [email protected] يعمل! .
لا يوجد أي خيارات للاستعلام الكلي ، لذا لا أعرف ، ربما يكون هذا هو الفرق بيني وبين الإصدار الأصلي @ dcolens .

فتح أي شخص قضية للسائق الأصلي؟ حتى أتمكن من متابعته ...
الآن أقيم مع [email protected]

تم تحديث [email protected] إلى [email protected] والذي يتضمن إصلاحًا لمراقبة انتهاء مهلة العمليات وإنشاء حدث مهلة عند تشغيل العمليات @ 1284917

قريباً تحديثات Mongoose إلى [email protected] ، سأجربها.

نفس المشكلة بالنسبة لي ، ولست متأكدًا مما إذا كانت مجرد مجاميع تعمل لفترة طويلة تنتهي ، أم أنها عشوائية وليست مهلة حقيقية على الإطلاق. يبدو أنه ينتهي في بعض الأحيان على الفور تقريبًا ، لكن في أحيان أخرى يتم تشغيله لمدة 30 ثانية أو نحو ذلك. في هذه الحالة بالذات ، لدي أربعة تجميعات execs تعمل في وقت واحد.

بالرجوع إلى [email protected] و [email protected] يعمل على إصلاح ذلك ، فأنا أفعل ذلك الآن.

نأمل أن يتم إصلاح هذا في الإصدار التالي لأن mongoose 4.7.7 يستخدم [email protected]. في كلتا الحالتين ، هذه ليست مشكلة نمس حقًا مثل @ vkarpov15 الذي قاله ولكن يتعلق أكثر بـ mongodb. سأغلق هذا الآن ، ولكن إذا كنت لا تزال تواجه نفس المشكلة بعد الإصدار التالي ، فيجب عليك فتح تذكرة أو PR في نهاية mongodb.

أعتقد أنه قد يكون لهذه المشكلة أكثر مما تراه العين. كان علي أن أعود إلى 4.4.20 لإيقاف هذه المهلات الإجمالية التي تحدث في جميع الظروف تمامًا. كان لكل من 4.7.x و 4.6.x مهلة زائفة سريعة جدًا في ظل بعض ظروف عمليات الإعدام المتزامنة المتعددة. لقد تخطيت 4.5 وعدت مباشرة إلى الإصدار الجيد المعروف (4.4.20) والذي نستخدمه في الإنتاج ، وقد أدى ذلك إلى حل المشكلة تمامًا ، لكن TBH ما زلت أشعر بالحيرة تجاه ما يحدث. أنا آسف أنه ليس لدي أي بيانات أخرى لإضافتها ، لكنني لست متأكدًا مما إذا كانت المشكلة تتعلق فقط بإصدار برنامج التشغيل mongodb الأصلي الذي يستخدمه النمس ، أو إذا كان هناك أكثر من عامل مساهم واحد في العمل .

تواجه نفس المشكلة مع [email protected] و [email protected]. المهلات غريبة حقًا. هذا السؤال قصير جدًا (حوالي 5 ثوانٍ) وقابل للتكرار جدًا ولكن الاستعلامات الأخرى تستغرق وقتًا أطول من 5 ثوانٍ ولا تنتهي مهلتها

أنا متأكد من أن المهلات غالبًا ما تكون مزيفة. في أحد السيناريوهات التي كنت أنظر إليها ، بدأت أربع عمليات تجميع متزامنة تستغرق حوالي 30 ثانية. انتهت مهلة واحدة في 8 ثوان ، وانتهت مهلة واحدة في 20 ثانية ، ولكن اكتملت الأخرى بشكل طبيعي في 30 ثانية. تسبب التكرار في ترتيب مهلة مختلف ، ولكن نتيجة مماثلة دائمًا. أظن أنه تم تعيين المهلات بشكل غير صحيح على التوصيلات الخاطئة ، أو لم تتم إزالتها عند اكتمال إحدى العمليات بحيث يتم إطلاقها بشكل غير متوقع على exec لاحق. شيء من هذا القبيل على أي حال. لسوء الحظ ليس لدي وقت في الوقت الحالي لمتابعة ذلك.

يبدو أن [email protected] قد حل المهلات بالنسبة لي. @ steve-p-com كما تقترح ، كانت المهلات في 4.7.2 مزيفة بالفعل وتسببت في إصدار أحداث خطأ على اتصال خاطئ ، وقد تم حل هذا عن طريق [email protected] ولذا يجب أن يكون [email protected] تعمل بشكل جيد في قضيتك. هل أجريت اختبارًا باستخدام هذا الإصدار؟

لم تختبر 4.7.9 أو 4.8.0 حتى الآن ، ربما قدم [email protected] انحدارًا ، والذي من شأنه أن يفسر المشكلة التي يواجههاflosky . هل هذه المهلة تحدث أيضًا على [email protected]؟

لقد أعدت الاختبار مع 4.8.1 اليوم ، ولم أواجه أي مشاكل مع المهلات غير المتوقعة. لقد قمت بإزالة جميع مخابئ npm ومخابئ الغزل أولاً ، ثم قمت بضغط node_modules ، ثم أعدت تثبيت كل شيء. حتى الان جيدة جدا.

يحدث لي أيضًا مع 4.8.1. عدت إلى إصدارات عديدة من Mongoose و MongoDB وحصلت على المشكلة طوال الوقت.

thenitai هل لديك المزيد من السياق / هل يمكننا رؤية كيفية إعداد اتصال mongoDB الخاص بك؟

varunjayaraman لقد وجدت أن رمز خطأ المجال الخاص بنا يكتشف الخطأ وبالتالي يعيد تشغيل تطبيقنا. ومع ذلك ، فإن القضية لا تزال قائمة.

لست متأكدًا تمامًا مما تريد رؤيته في إعداد اتصالنا. هل تقصد خيارات الاتصال؟ إذا كان الأمر كذلك ، فهم:

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

لدي نفس المشكلة أيضا. حتى مع أحدث إصدار v4.8.4

وجدت للتو المشكلة. في حالتي ، يرجع السبب في ذلك إلى أن استخدام ذاكرة الخادم مرتفع جدًا (95٪ ~ 99٪ دائمًا) ، بعد زيادة الذاكرة ، لا توجد مشكلة بعد الآن.

أرى هذه المشكلة أيضًا على خادمي مع Mongoose 4.7.7 ، MongoDB 3.4.1 و Node 4.7.2 . عندما يكون استخدام الذاكرة مرتفعًا على الخادم الخاص بي ، يبدو أن المهلات تحدث بشكل عشوائي في سلسلة:

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

كما ترى الطلبات ، لم يستمر أي من الطلبات أكثر من 12 ثانية. تم إعداد موصل النمس بهذه الطريقة:

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
    }
};

أي فكرة عما يمكن أن يحدث خطأ؟

تضمين التغريدة
بعض واحد الرجاء مساعدتي.

هل قام شخص ما بإرسال تقرير خطأ إلى مطوري برنامج تشغيل mongo الأصلي؟

هل ما زالت هذه المشكلة موجودة في 4.9.1؟

نعم ، لا يزال الإصدار موجودًا في 4.9.1 ....

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

واجهت نفس المشكلة اليوم بعد التحديث إلى أحدث إصدار من النمس ، ثم رجعت إلى 4.7.1 وكل شيء يعمل بشكل مثالي!

ظلت المشكلة دون حل لبعض الوقت الآن.
ماذا يجب ان نفعل لإصلاح هذا؟
في مرحلة ما ، أود التحديث إلى الإصدار الأخير ولكن لا يمكنني القيام بذلك إلا بعد حل هذه المشكلة.

لقد قمت بتحديث النمس من 4.4.17 إلى 4.7.9 منذ حوالي شهر. منذ ذلك الحين ، أخطأ cronjob يوميًا ثلاث مرات ، دائمًا مع خطأ مهلة اتصال mongo.

سوف أقوم بالتبديل إلى Mongoose 4.7.1 ومعرفة ما إذا كان هذا يساعد.

تحرير: رسالة الخطأ

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 كان لدي نفس المشكلة لأكثر من شهر في الإنتاج ، عدت إلى 4.7.1 أمس ، لا مزيد من القضايا!

تحدث نفس المشكلة @ 4.7.7

مع Mongo 4.7.1 ، توجد مشاكل أقل من 4.7.9 ، لكن ما زلت أحصل على رسالة خطأ عرضية عند الحفظ في 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)

حدث الخطأ في Linux VM الذي يعمل بنظام Ubuntu 15.04

نفس الشيء هنا مع:

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

mongo الإصدار @ 3.2.11

على AWS EC2.

أي تحديث / حل بديل؟ هل سيكون لـ keepAlive: true أي تأثير إيجابي؟

لست متأكدًا مما إذا كان هذا يساعد أي شخص ، ولكن في حالتنا لاحظنا أننا كنا نمرر معلمات المهلة ( socketTimeoutMS إلخ) عبر options.server . كان هذا _ خطأ_! نحن نستخدم مجموعة متماثلة وعلى هذا النحو يجب أن تكون خياراتنا على النحو التالي:

في حالتنا ، احتاج التطبيق بالفعل إلى القدرة على الاتصال بنسخة متماثلة أو خادم عادي ، لذلك قمنا بما يلي:

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

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

أتمنى أن يساعد هذا شخص ما!

مرحبا بالجميع،
أنا أستخدم mlab لاستضافة قاعدة البيانات الخاصة بي. فهمت هذا الخطأ
خطأ اتصال Mongo DB: {[MongoError: اتصال 0 بـ ds155841.mlab. com: انتهت مهلة xxxxx '}

RemeAjayi أعتقد أن هذا لا علاقة له بهذه التذكرة.
يجب أن تحاول / إنشاء واحدة أخرى بعد البحث في المشكلة.

@ ht2 قمت بحفظ يومي ❤️

هل هناك أي حل عملي للإصدار الأصلي؟

في حال كان ذلك يساعد أي شخص ، فقد واجهت هذه المشكلة عند إجراء موازاة استعلامين قاسيين find() (باستخدام نمط الوعد).

تحول

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

في نهج تسلسلي

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

جعلها تعمل

اعتقد cyrilchapon أنه كان يعمل بالنسبة لي ولكن أسلوبك التسلسلي لم يحل مشكلتي: /

إنه متقطع .. أحيانًا يعمل ، وأحيانًا ينفد ..

لماذا هذا الصمت وثيق؟

متابعة لتعليقي السابق https://github.com/Automattic/mongoose/issues/4789#issuecomment -298849907

لقد قمت بنقل قاعدة البيانات المسيئة من جهاز افتراضي إلى حاوية عامل إرساء مع علامة تجارية جديدة لـ linux و nodeJS و mongoDB. لقد أنشأت اختبار تحمّل لا يفعل شيئًا سوى اقتطاع قاعدة البيانات وإعادة تعبئتها طوال اليوم. لقد اكتشفت أن حوالي 1 من 6000 عملية تشغيل اختبارية تؤدي إلى خطأ انتهاء المهلة.

لقد كنت أظن نفس التجربة بعد تعليقي الأخير ، نسيت أن أذكرها.

لكن يبدو أن تحديث العقدة إلى أحدث إصداراتها جنبًا إلى جنب مع جميع الأقسام الأخرى قد أدى إلى الحيلة.

الآن مع التعليق أعلاه أعتقد أنها مسألة خطأ موروث

كنت أواجه نفس المشكلة أيضًا مع mongo 3.6.2 و mongoose 4.9.2
لقد أصلحته عن طريق تمرير معلمات اتصال إضافية

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

mzahidriaz شكرًا جزيلاً لك أن الحلول التي تقدمها تناسبني ولكن هل يمكنك شرح أو الرجوع إلى رابط لكيفية اختيارك لتلك المعايير لحل هذه المشكلة؟

@ MinhNguyen41092 الآن المستندات الوحيدة هي مستندات برنامج تشغيل MongoDB http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#connect . سنضيف تفاصيل حول هذا إلى http://mongoosejs.com/docs/connections.html

بالنسبة لأولئك الذين يعانون من أخطاء متقطعة ، كان لدي تلك الأخطاء أيضًا على mongoose-4.13.11 مع mongodb-2.2.35 mongodb-core-2.1.19 في بيئة معينة. استفسارات مختلفة في نقاط مختلفة في مجموعتنا الاختبارية ، على الرغم من اختبار جزء معين من تطبيقنا في الغالب والذي يحتوي على استعلامات ثقيلة ويقوم بأشياء بالتوازي مع IIRC ، كانت جميعها تتلقى رسالة الخطأ هذه. ومجموعة الاختبار بأكملها لا تستغرق حتى 15 ثانية للتشغيل ، لذلك لا توجد طريقة كان ينبغي عليّ أن أواجه بها المهلات الافتراضية المدمجة في الثلاثينيات في المقام الأول:

     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)

حدث هذا فقط في خادم بناء اختبار CI الخاص بنا. لم أتمكن من إعادة إنتاجه على جهاز التطوير الخاص بي.

(في نظامي الخاص (الريبو الخاص ، هذا للإشارة الخاصة بي في حالة الحاجة إلى البحث عن هذا مرة أخرى) ، يظهر هذا الخطأ على الأقل في أرقام البنية 358 ، 356 ، 355 ، 352).

بعد تشغيل useMongoClient: true ، يبدو أن الاختبارات مرت بشكل موثوق به في بيئة CI حتى الآن. لقد أجريت ثلاث عمليات تشغيل ناجحة مع هذا التغيير فقط في حين أن العديد من عمليات التشغيل المتسلسلة السابقة تفشل بسبب خطأ المهلة الغريب.

أعتقد أن thenitai @ steve-p- comadrienbaron كانت تعاني من المهلات الزائفة الغريبة أيضًا. أعتقد أن الخطأ كان يحدث لكم يا رفاق قبل إصدار 4.11 والذي جلب حتى useMongoClient: true كخيار. هل يمكنك معرفة ما إذا كان ذلك قد أحدث فرقًا في أعباء عملك؟

[email protected]
[email protected]
[email protected]
لديك نفس المشكلة ، 1.5M أخطاء في شريط القوائم لبضعة أيام ، مع ما يمكن توصيله؟ كيف حل؟
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 انظر الرد على سؤالك على # 5376

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات