Sentry-javascript: مع تسرب الذاكرة withScope ، يكون واضحًا جدًا عند استخدام scale.setTag في @ sentry / node

تم إنشاؤها على ١٢ أغسطس ٢٠١٩  ·  3تعليقات  ·  مصدر: getsentry/sentry-javascript

الحزمة + الإصدار

  • [] @sentry/browser
  • [x] @sentry/node
  • [] raven-js
  • [] raven-node _ (غراب للعقدة) _
  • [ ] آخر:

إصدار:

5.5.0

وصف

إنشاء عدد جديد منذ أن تم إغلاق # 1762.
يوجد تسرب صغير للذاكرة في @ sentry / node. استدعاء setTag مع بعض السلاسل الطويلة يجعله أكبر بكثير.
يمكن تحديد هذا لأنه ليس فقط تسربًا للذاكرة ، ولكن وفقًا لمقاييس DO الخاصة بي ، فإنه يتسبب في زيادة دائمة في استخدام وحدة المعالجة المركزية وعرض النطاق الترددي العام الذي لا يمكن إصلاحه إلا عن طريق إعادة تشغيل الخادم.
تُظهر الصورة ما يحدث عندما أضفت setTag (11 يوليو) وعندما أزلته (9 أغسطس).
System memory (1)

Needs Reproduction

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

kamilogorek الرمز المخالف هنا: https://github.com/ParabolInc/action/blob/0bde4b002aa3d53fc00f1febcb39185079d827f2/packages/server/utils/sendToSentry.ts#L28 -L35

من نظراته ، فإن النطاق لا يحصل على GC.

قد لا تحظى بشعبية ، ولكن كل ما أريده حقًا هو استدعاء واجهة برمجة تطبيقات نظيف يأخذ استثناءات ومتغيرات. على سبيل المثال ، Sentry.captureExpection(error, {tags: {foo: 1}}) . من شأنه التخلص من النطاقات وتسريبات الذاكرة المرتبطة بها.

ال 3 كومينتر

هل أنت قادر على تقديم بعض الحالات المصاحبة لذلك؟ سيؤدي setTag مع الطلبات المتزامنة المتعددة بالتأكيد إلى زيادة مساحة الذاكرة ، ولكن بمجرد أن يكون النطاق هو GC ، يجب أن تنخفض الذاكرة إلى خط الأساس.

kamilogorek الرمز المخالف هنا: https://github.com/ParabolInc/action/blob/0bde4b002aa3d53fc00f1febcb39185079d827f2/packages/server/utils/sendToSentry.ts#L28 -L35

من نظراته ، فإن النطاق لا يحصل على GC.

قد لا تحظى بشعبية ، ولكن كل ما أريده حقًا هو استدعاء واجهة برمجة تطبيقات نظيف يأخذ استثناءات ومتغيرات. على سبيل المثال ، Sentry.captureExpection(error, {tags: {foo: 1}}) . من شأنه التخلص من النطاقات وتسريبات الذاكرة المرتبطة بها.

ينفذ withScope في نهاية دورة حياته عملية popScope التي تتخلص من الطبقة من المصفوفة الداخلية ، وبالتالي لا يوجد مرجع قوي لها - يعتني GC بها تلقائيًا.
fwfw يمكنك تغيير مكالمتك إلى:

Sentry.withScope((scope) => {
  scope.setUser(user)
  scope.setTags(tags)
  Sentry.captureException(error)
});
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات