memory leak در NodeJS

پرسیده شده
فعالیت 1256 روز پیش
دیده شده 697 بار
0

سلام

فرض کنید یک برنامه NodeJS داریم که کلا REST FULL API هستش و با TypeScript نیست.کلا با توابع و module.exports  و  required کار میکنه و رفته روی  سرور حالت production ولی Ram خیلی بالایی مصرف میکنه و کاربر خاصی نداره

چطوری بفهمیم این برنامه memory leak داره؟ آیا ابزارهایی برای تسخیص این کار هست؟

 اگر memory leak داره چطوری برطرفش کنیم؟

 

فایل پیوست

محسن محمدخانی
محسن محمدخانی

24 آبان 99

1
حذف شده

منظور از resource اون کدهایی هستش که به شبکه،فایل یا دیتابیس وصل میشن و از اونجا دیتا میخونن یا می نویسن. بعضا این کدها به درستی مدیریت نمیشه که باعث میشه از حافظه بیرون نیاد و memory leak ایجاد بشه. فرقی نمیکنه async باشه یا sync و برای این گفتم کدهای async رو بررسی کنید چون کدهای async رو js داخل queue خودش در event loop قرار میده تا اجرا بشه و ممکنه در اینجا همون دسترسی به resource ها مشکل ساز بشه. تعداد کانکشن ها می تونه مصرف RAM رو بالا ببره و قطعا یک RAM 512 برای این کار شما اصلا مناسب نیست و فقط برای تست تعداد خیلی کمی کاربر مناسبه.

فایل پیوست

کیوان علی محمدی

توسط

کیوان علی محمدی

4 آذر 99

1
حذف شده

سلام. احتمالا در کدنویسی مشکلاتی وجود داره. ممکنه شما resource ها رو باز کرده باشید که بسته نشده یا timer هایی که clear نشدن. حتما حتما نقاطی که به صورت async هستن رو بررسی کنید.

فایل پیوست

کیوان علی محمدی

توسط

کیوان علی محمدی

25 آبان 99

0
حذف شده

سلام

من داخل کدهام از settimeout , setinterval استفاده نکردم

 درخواست که بصورت async هستش هم فقط با استفاده از  sequelize با جدول های MySql کار میکنه

در  چه حالتی async میتونه باعث memory leak بشه؟ امکانش هست یک مثال بزنید

منظورتون از ‘resource’ چی هستش؟

 فقط یک فایل جاوااسکریپت دارم که داخل head چند سایت گذاشتم وقتیکه کاربری , سایت تو مرورگر بازمیکنه یه تعداد  Request , Response از نوع POST  ارسال میشه (مثل کاری پلتفرم ها تبلیغاتی انجام میدن) البته Ram سرور فعلا 512MB هستش

امکان داره به خاطر Request , Response ها اون فایل جاوااسکریپت باشه؟

 

 

فایل پیوست

محسن محمدخانی

توسط

محسن محمدخانی

26 آبان 99