Node-redis: اقرأ ECONNRESET كل 3 دقائق - يتعطل خادم NodeJS بسبب هذا. استخدام البرنامج المساعد newrelic لمراقبة الخادم.

تم إنشاؤها على ٩ فبراير ٢٠١٥  ·  26تعليقات  ·  مصدر: NodeRedis/node-redis

خطأ: اتصال Redis بـ redis1.tfs. tfs: 6379 فشل - اقرأ ECONNRESET في RedisClient.on_error (/var/www/a/b/c/node_modules/redis/index.js:196:24) في Socket.(/var/www/a/b/c/node_modules/redis/index.js:106:14)
في Socket.emit (events.js: 95: 17)
على net.js: 441: 14
في /var/www/a/b/c/node_modules/newrelic/node_modules/continuation-local-storage/node_modules/async-listener/glue.js:188:31
في /var/www/a/b/c/node_modules/newrelic/node_modules/continuation-local-storage/node_modules/async-listener/glue.js:188:31
في process._tickDomainCallback (node.js: 486: 13)
في العملية.(/var/www/a/b/c/node_modules/newrelic/node_modules/continuation-local-storage/node_modules/async-listener/index.js:18:15)

question

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

@ ayazpasha2434 هذا الخط حل خطأي

client.on ('error'، function (err) {console.error (err)})

ال 26 كومينتر

بالنسبة لي ، هذا يبدو وكأنه مشكلة في شبكة خارج Node.js ، هذا الخطأ "ECONNRESET" عندما يغلق الاتصال عن بعد بـ Node.js المقبس بشكل غير متوقع.

هل تستخدم وكيلاً بين Node و Redis؟

ما هو إصدار خادم Node / node_redis / Redis؟

أشك في أن وكيل NewRelic متورط ، ولكن يمكنك دائمًا محاولة التكاثر بدون الوكيل ومعرفة ما إذا كان ذلك سيؤدي إلى حل المشكلة. سم مكعب / wraithan

هذه الخطوط هي فقط CLS تفعل الشيء. مع المزيد من repro يمكنني استبعاد وكيل New Relic تمامًا. لكنني واثق نسبيًا من أن هذا ليس سببًا لنا.

أزلت وكيل NewRelic ، لا تزال المشكلة تحدث. تقريبا. كل 3 دقائق أحصل على هذا الانهيار يحدث. فيما يلي السجلات كمرجع.

الأحداث. js: 72
رمي إيه ؛ // حدث "خطأ" غير معالج
^
خطأ: اتصال Redis بـ redis1.tfs. tfs: فشل
في RedisClient.on_error (/var/www/a/b/c/node_modules/redis/index.js:196:24)
في المقبس.(/var/www/a/b/c/node_modules/redis/index.js:106:14)
في Socket.emit (events.js: 95: 17)
على net.js: 441: 14
في process._tickDomainCallback (node.js: 486: 13)
خطأ: تم الخروج من البرنامج النصي المكتشف للأبد مع الرمز: 8
خطأ: محاولة إعادة تشغيل البرنامج النصي رقم 50

أيضًا ، أنا أستخدم Node.JS - v0.10.35 ، node_redis - 0.12.1 و Redis - 2.8.4.
أنا أصل إلى Redis مباشرة عبر IP في Node.

كنت أواجه هذه المشكلة أيضًا ، ولكن تم حلها للتو بعد أن أدركت أنني كنت أتلاعب بملفي /etc/hosts أمس لسبب آخر. كانت مفقودة:

127.0.0.1 localhost

@ ayazpasha2434 قد لا يكون الحل هو نفسه بالنسبة لك ، ولكن مثل الآخرين يلمحون ، فهو بالتأكيد خارج العقدة وفي env / shell / OS / VM. تراجع قليلا وحدق فيه.

sarathms لدي هذا التعيين في ملف hosts. ومع ذلك ، فإن آلة Redis في حالتي هي آلة بعيدة. فقط تم التحقق من ذلك ، لدي تعيين المضيف المحلي المذكور في جهاز Redis أيضًا. لا تزال المشكلة لم تحل.

أنا أيضا أواجه نفس المشكلة. هنا هو إخراج وحدة التحكم

الأحداث. js: 72
رمي إيه ؛ // حدث "خطأ" غير معالج
^
خطأ: اتصال Redis بـ pub-redis-10606.us-east-1-1.1.ec2.garantiadata. com: فشل
odulesredisindex.js: 196: 24)
في المقبس.(C: UsersGigiDesktopeduknow_api_ver_1authnode_modulesredisindex.js: 106: 14)
في Socket.emit (events.js: 95: 17)
على net.js: 441: 14
في process._tickCallback (node.js: 442: 13)

@ ayazpasha2434 هذا الخط حل خطأي

client.on ('error'، function (err) {console.error (err)})

@ ayazpasha2434 هل لدى Waterloo الإجابة الصحيحة لك؟

يبدو أن هناك مشكلة في اتصالك بالشبكة ولا يبدو أنها مشكلة في node redis. يجب أن تكون إضافة معالج الأخطاء كافية حتى لا يتعطل التطبيق بعد الآن (ويجب إرفاقه دائمًا).

واجهت هذه المشكلة عندما أنشر http (استخدام المنشور) على خادم JAVA. {[خطأ: اقرأ ECONNRESET]
الكود: "ECONNRESET" ،
errno: "ECONNRESET" ،
syscall: "قراءة" ،
الرد: غير محدد}
خطأ: اقرأ ECONNRESET
في export._errnoException (util.js: 856: 11)
في TCP.onread (net.js: 546: 26)
رد الاتصال المزدوج!
POST / user_archives / إنشاء / حفظ 500 45.306 مللي ثانية - 386
خطأ: اقرأ ECONNRESET
في export._errnoException (util.js: 856: 11)
في TCP.onread (net.js: 546: 26)

@ biggu0 لست متأكدًا من اتصال هذا بـ node_redis. لمعرفة المزيد حول ECONNRESET قد ترغب في النظر في ستاكوفيرفلوو .

مرحبا ،
نحن نشهد أيضًا هذه المشكلة. نلاحظ أنه يمكن أن يكون بسبب redis SNAPSHOTTING. كلما أخذ redis لقطة ويتم إعادة تعيين اتصال القرص. لإثبات نفسي أقارن سجلات التطبيق بسجلات تصحيح أخطاء redis وتطابق التوقيتات تمامًا.

فيما يلي إعداد اللقطات في redis.conf
حفظ 900 1
حفظ 300 10
حفظ 60 10000

يرجى إعلامنا إذا كنا نفعل شيئًا خاطئًا.

أواجه أيضًا مشكلة في الاتصال بشكل متكرر.

ERR في RedisClient.emit (events.js: 188: 7)
ERR في RedisClient.on_error (/home/vcap/app/node_modules/redis/index.js:394:14)
ERR في RedisClient.(/home/vcap/app/server.js:28:13)
ERR في emitErrorNT (net.js: 1281: 8)
ERR في المقبس.(/home/vcap/app/node_modules/redis/index.js:272:14)
ERR في process._tickCallback (داخلي / عملية / next_tick.js: 98: 9)
خطأ خطأ: اتصال Redis بـ XXXXXXXX: فشل
خطأ في TCP.onread (net.js: 572: 26)
ERR في _combinedTickCallback (داخلي / عملية / next_tick.js: 74: 11)
ERR في emitOne (events.js: 96: 13)
الخطأ في الصادرات ._errnoException (util.js: 1022: 11)
ERR في Socket.emit (events.js: 188: 7)

بعد الحصول على الخطأ ، يتم إعادة الاتصال تلقائيًا.
ما يمكن أن يكون مشكلة لفقد الاتصال.

مرحبًا واترلو ،
حيث تضع هذه العبارة client.on ('error'، function (err) {console.error (err)})
وأعتقد أن هذا البيان لمجرد التحكم في خطأك لا شيء آخر.
هل هي حقا صالحة للاستعمال؟
من فضلك أعطني أفكارك في أسرع وقت ممكن.

شكرا لك مقدما!!!

مرحبا

انا ايضا اواجه نفس المشكلة

Events.js: 160
رمي إيه ؛ // حدث "خطأ" غير معالج
^

خطأ: اقرأ ECONNRESET

أدى هذا إلى حل مشكلتي مع:

  1. لقد عطلت جميع عمليات مراقبة عملياتي (بقايا جديدة ، أبم مرنة ...)
  2. لقد استخدمت هذا الرمز
    `` جافا سكريبت
    process.on ('uncaughtException' ، وظيفة (يخطئ) {
    خطأ وحدة التحكم (err.stack) ؛
    console.log ("العقدة لم تخرج ...")؛
    }) ؛

أنا أيضا أواجه هذه المشكلة. أنا أستخدم مع إطار عمل sails.js مع خطاف ، لذلك لا يوجد سوى اتصال واحد بخادم redis عند بدء خدمة العقدة ، وسوف نستخدم كائن sails العالمي للوصول والعمل مع redis

redisClient = redis.createClient({
    host: redisConfig.host,
    port: redisConfig.port,
    db: redisConfig.db,
    retry_strategy: (retryOptions) => {
        if (retryOptions.error && retryOptions.error.code === 'ECONNREFUSED') {
            // End reconnecting on a specific error and flush all commands with
            // a individual error
            return new Error('The server refused the connection');
        }

        if (retryOptions.total_retry_time > 1000 * 60 * 60) {
            // End reconnecting after a specific timeout and flush all commands
            // with a individual error
            return new Error('Retry time exhausted');
        }

        if (retryOptions.attempt > 3) {
            // End reconnecting with built in error
            return undefined;
        }

        sails.log.debug('Handling redis retry strategy', {
            error: retryOptions.error,
            totalRetryTime: retryOptions.total_retry_time,
            attempt: retryOptions.attempt
        });

        // Reconnect after
        return Math.min(retryOptions.attempt * 100, 3000);
    }
});

هنا هو تتبع المكدس للخطأ
خطأ محبط: فُقد اتصال Redis وتم إحباط الأمر. قد يكون تمت معالجته. js: 664: 14) n في RedisClient.on_error (/var/sample-app/node_modules/redis/index.js:410:10) في Socket.(/var/sample-app/node_modules/redis/index.js:279:14) في emitOne (events.js: 116: 13) n في Socket.emit (events.js: 211: 7) n في emitErrorNT ( Internal / streams / destruction.js: 66: 8) n at /var/sample-app/node_modules/async-listener/glue.js:188:31n at args. (دالة مجهولة) (/ usr / lib / node_modules / pm2 /node_modules/event-loop-inspector/index.js:138:29)n في _combinedTickCallback (داخلي / عملية / next_tick.js: 139: 11) n at process._tickDomainCallback (داخلي / عملية / next_tick.js: 219: 9 ) n في process.fallback (/var/sample-app/node_modules/async-listener/index.js:563:15).

يعمل تطبيق العقدة الخاص بنا على حاوية Docker وسيتصل بخادم Redis المثبت على مثيل EC2 linux.

نواجه أيضًا نفس المشكلة ، ولكن هنا وضعنا stunnel لتوكيل redis إلى المضيف المحلي باستخدام التكوين أدناه stunnel.

فيبس = لا

setuid = الجذر

setgid = الجذر

pid = /var/run/stunnel.pid
التصحيح = 7

الخيارات = NO_SSLv2

الخيارات = NO_SSLv3
الإخراج = /var/log/stunnel.log

العميل = لا

المقدمة = نعم

[redis-cli]
العميل = نعم
قبول = 127.0.0.1:6379
الاتصال = نقطة إرسال redi: 6379

العقدة يتم قطع الاتصال بهذه الأخطاء أدناه لكل دقيقتين. نقوم بتشغيل هذه من خلال حاويات الرصيف.

فشل اتصال Redis بـ 127.0.0.1:6379 - اقرأ ECONNRESET
في TCP.onStreamRead (داخلي / stream_base_commons.js: 111: 27)
خطأ: فشل اتصال Redis بـ 127.0.0.1:6379 - اقرأ ECONNRESET
في TCP.onStreamRead (داخلي / stream_base_commons.js: 111: 27)
خطأ: فشل اتصال Redis بـ 127.0.0.1:6379 - اقرأ ECONNRESET
في TCP.onStreamRead (داخلي / stream_base_commons.js: 111: 27)
خطأ محبط: فُقد اتصال Redis وتم إحباط الأمر. ربما تمت معالجتها.

اي قرار؟

نواجه أيضًا نفس المشكلة ، ولكن هنا وضعنا stunnel لتوكيل redis إلى المضيف المحلي باستخدام التكوين أدناه stunnel.

فيبس = لا

setuid = الجذر

setgid = الجذر

pid = /var/run/stunnel.pid
التصحيح = 7

الخيارات = NO_SSLv2

الخيارات = NO_SSLv3
الإخراج = /var/log/stunnel.log

العميل = لا

المقدمة = نعم

[redis-cli]
العميل = نعم
قبول = 127.0.0.1:6379
الاتصال = نقطة إرسال redi: 6379

العقدة يتم قطع الاتصال بهذه الأخطاء أدناه لكل دقيقتين. نقوم بتشغيل هذه من خلال حاويات الرصيف.

فشل اتصال Redis بـ 127.0.0.1:6379 - اقرأ ECONNRESET
في TCP.onStreamRead (داخلي / stream_base_commons.js: 111: 27)
خطأ: فشل اتصال Redis بـ 127.0.0.1:6379 - اقرأ ECONNRESET
في TCP.onStreamRead (داخلي / stream_base_commons.js: 111: 27)
خطأ: فشل اتصال Redis بـ 127.0.0.1:6379 - اقرأ ECONNRESET
في TCP.onStreamRead (داخلي / stream_base_commons.js: 111: 27)
خطأ محبط: فُقد اتصال Redis وتم إحباط الأمر. ربما تمت معالجتها.

اي قرار؟

نفس الشيء بالنسبة لي أعتقد أن هذه مشكلة مع stunnel

أنا أيضا أواجه نفس الخطأ

{ Error: Redis connection to xx.xx.x.x:6379 failed - read ECONNRESET" 

at TCP.onStreamRead (internal/stream_base_commons.js:111:27) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' 

أنا أستخدم أيضًا معالج الأخطاء ، ولكن السبب وراء حدوث ذلك ، يمكن أن يؤثر على مكالمات الاستعلام الخاصة بي ويؤخر طلباتي.

Ayaz هل يمكنك من فضلك فتح هذه المشكلة لأن هذه المشكلة لم يتم حلها بالكامل ، لقد تعامل الأشخاص فقط مع استجابة الخطأ ولكن المشكلة لا تزال دون حل.

الاهتزاز: نفس المشكلة هنا:

error: Error: Redis connection to xx.yy.zz.aa:6379 failed - read ECONNRESET at TCP.onStreamRead (internal/stream_base_commons.js:205:27) { errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read' },

أرى نفس المشكلة مع:

  • NodeJS v12.16.3
  • إطار عمل NestJS
  • IOredis: 4.2
  • nestjs-redis: 1.2.8

يتم توفير Redis باستخدام Google Cloud MemoryStore.

تظهر السجلات:

[ioredis] حدث خطأ غير معالج: خطأ: قراءة ECONNRESET

يحدث هذا حوالي مرة واحدة كل 24 ساعة دون أي سبب محدد أو نفس الخطوات ، إنه يحدث للتو

@ robertop87
أرى نفس المشكلة. يتم توفير Redis باستخدام Google Cloud MemoryStore. هل حل هذه المشكلة؟

تظهر أيضًا مشكلة مشابهة جدًا مع Cloud run / Cloud Functions عند الاتصال بـ Cloud Memory Store. من المحتمل أن يحدث ذلك عندما يتم إيقاف الموارد الأساسية في وقت قريب جدًا بشكل عشوائي بواسطة Google.

بدأت هذه المشكلة منذ حوالي أسبوع بالنسبة لنا ، دون أي تغييرات على كيفية تعاملنا مع اتصال Redis. نحن أيضًا نستخدم ioredis للتعامل مع الاتصال وتشغيل العقدة 12.

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

ما فعلته هو إضافة التالي في التكوين:

reconnectOnError: (error): boolean => {
  console.log('Always reconnect on error', error)
  return true
}

لا يزال خطأ ECONNRESET موجودًا ، ولكن تمت إعادة محاولة الاتصال الآن ولم يعد مثيل Google الخاص بي متوقفًا.

CC: @ hkd987

اقرأ المزيد من التفاصيل حول reconnectOnError هنا: https://github.com/luin/ioredis

@ robertop87 تم إجراء نشر جديد مع التكوين المحدد لتعيين reconnectOnError دائمًا للعودة إلى القيمة الصحيحة. يبدو أن هذه مشكلة تحتاج إلى إعادة فتح أو إصدار تذكرة جديدة ، نظرًا لأن هذا يحدث في الإصدار الأخير.

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