💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محسن محمدخانی
memory leak در NodeJS
کیوان علی محمدی حل شده توسط کیوان علی محمدی

سلام

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

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

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

 

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

کیوان علی محمدی ۲۵ آبان ۱۳۹۹، ۱۱:۱۳

سلام

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

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

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

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

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

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

 

 

محسن محمدخانی ۲۶ آبان ۱۳۹۹، ۱۳:۱۷

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

بهترین پاسخ
کیوان علی محمدی ۰۴ آذر ۱۳۹۹، ۰۶:۵۰