node.js - الكشف عن تسرب الذاكرة في العقيدات




(5)

شيء واحد جيد هو https://github.com/bnoordhuis/node-heapdump غاية البساطة ويمكنك مشاهدة النتائج في Chrome (بسبب وجود محرك V8 في جافا سكريبت وعقدة المتصفح) ومقارنة أحجام الكائنات في الذاكرة في كل لحظة تريدها.

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

ابدأ تشغيل التطبيق الخاص بك مع "node - expos-gc file.js" وفي أي مكان في الكود يمكنك استخدام function gc ()؛ للاتصال جمع القمامة.

هل هناك بعض الأدوات لاكتشاف تسرب الذاكرة في العقيدات؟ وأخبرني عن تجربتك في اختبار تطبيقات nodejs.


في تعقب تسرب للذاكرة ، جربت مفتش العقدة أعلاه.
اعتبارًا من أبريل 2012 ، لم يتم تحديثه للعمل مع إصدار العقدة المعاصر v0.6.12 على هذا النحو ، وجدت: https://github.com/c4milo/node-webkit-agent .
كان قادرًا على عرض لقطات كومة الذاكرة المؤقتة لمحرك V8 الأحدث والذي لم يكن مدعومًا من قِبل مفتش العقدة. في غضون فترة قصيرة ، تمكنت من اكتشاف وحدة التسريب (في حالة قد تكون loggly) ، أتمنى أن يكون لديك نجاح مماثل!



يمكن أن أوصي أيضًا بالمصادر التالية:

  1. حلقات NodeUp التالية ، حيث تتم مناقشة أدوات الكشف عن ملفات التعريف وتسريبات الذاكرة:

  2. هذا المقال - تعقب تسريبات الذاكرة في Node.js - A Holiday Node.JS Holiday ، والذي يجمع بشكل أساسي جميع الوحدات والتقنيات المعروفة على نطاق واسع لتعقب تسرب الذاكرة

  3. بالنسبة لنظام التشغيل Mac OS - قد تكون أداة Instruments مفيدة لتصحيح الوحدات النمطية الأصلية (C ++). ليس متطورًا مثل أدوات SmartOS ، ولكنه سهل الإعداد.

طريقة 1 -
تتيح لنا العقدة تشغيل مجموعة Garbage يدويًا ، وهذا هو أول ما يجب علينا فعله عند محاولة تأكيد تسرب للذاكرة. يمكن تحقيق ذلك عن طريق تشغيل Node بعلامة - تعريض -cc (على سبيل المثال ، عقدة - تعرض - index.js). بمجرد تشغيل العقدة في هذا الوضع ، يمكنك تشغيل مجموعة Garbage برمجيًا في أي وقت عن طريق الاتصال بـ global.gc () من البرنامج.

يمكنك أيضًا التحقق من حجم الذاكرة المستخدمة من قبل العملية الخاصة بك عن طريق استدعاء process.memoryUsage ().

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

الطريقة 2 -

3 مقالب كومة الأسلوب

Node's - ضع علامة على علامة الهبوط في الإصدار 6. تتيح لك هذه الميزة تصحيح وفحص عملية العقدة الخاصة بك من داخل DevTools في Chrome.

ما عليك سوى بدء التطبيق بتمرير علامة --inspect:

$ node --inspect index.js

اتبع عنوان URL للمفتش وانتقل إلى علامة تبويب الذاكرة.

علامة التبويب DevTools الذاكرة

إليك ما سنفعله:

اضغط على التطبيق باستخدام autocannon -c 1 -d 60 http://localhost:PORT
[ https://www.npmjs.com/package/autocannon ]
التقط لقطة كومة بعد 10 ثوانٍ تقريبًا ، ومرة ​​أخرى بعد 30 ثانية.

مقارنة الكومة لقطة
يوضح لنا عرض المقارنة ما حدث بين اللقطات. يمكنك مشاهدة عدد كبير من الكائنات التي تم إنشاؤها أو لا يتم تجميعها بواسطة GC.

يرجى قراءة هذه المقالات المدهشة لمعرفة المزيد.
لقد ساعدوا كثيرا في العثور على تسرب وإصلاحه: -

https://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/

https://www.nearform.com/blog/self-detect-memory-leak-node/

https://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/





node.js