محتوای آموزشی وبلاگ نتآرام
در حال ساخت پروژه هستید و پیام
JavaScript heap out of memory ظاهر میشود. این خطا میگوید موتور JavaScript نتوانسته در محدوده heap در دسترس، حافظه لازم را فراهم کند. اما حافظه کل فرایند فقط heap نیست و سهمیه واقعی هاست یا کانتینر نیز ممکن است کمتر از حافظه کل سرور باشد.راهحل همیشگی واردکردن یک عدد بزرگ نیست. ابتدا مرحله شکست، سقف و ظرفیت واقعی را میفهمیم، سپس اندازه مناسب و راه کاهش مصرف را در کپی آزمایشی امتحان میکنیم.
۱. مطمئن شوید خطا در کدام مرحله است
در Terminal یا SSH همان محیط برنامه:
کد / دستورpwd
node --version
npm --version
node -e "const v8=require('node:v8'); console.log('heap limit bytes:', v8.getHeapStatistics().heap_size_limit)"
فرمان آخر سقف تقریبی heap فرایند آزمایشی Node را به بایت نشان میدهد؛ الزاماً سقف کل حافظه حساب یا همان فرایند build نیست. نسخه Node و شرایط محیط آزمایشی را با پنل مقایسه کنید. پیام کامل را بخوانید:
heap out of memory با ENOMEM سیستم یا کشتهشدن بدون پیام یکسان نیست، هرچند میتوانند به هم مربوط باشند.آیا خطا هنگام
npm ci، اجرای postinstall یا npm run build رخ میدهد؟ نام مرحله، زمان و آخرین تغییر پروژه را ثبت کنید. در هاست اشتراکی، بخش مصرف منابع پنل در همان زمان یا گزارش پشتیبانی میتواند نشان دهد سهمیه حساب نیز پر شده است.۲. حافظه واقعی و مصرف همزمان را در نظر بگیرید
free -h ممکن است حافظه کل میزبان را نشان دهد، نه محدودیت حساب یا کانتینر. اگر مدیر سرور به cgroup یا گزارش پنل دسترسی دارد، سقف و رخدادهای همان برنامه را بررسی کند. همچنین وبسایت فعال، پایگاه داده و سایر فرایندها به حافظه نیاز دارند. افزایش heap build تا نزدیک کل سهمیه میتواند سیستم را به جای رفع خطا به توقف اجباری برساند.فایلهای حجیم، source mapها، پردازش موازی و وابستگیهای build را با تنظیمات همان ابزار بررسی کنید. کاهش بار ورودی یا همزمانی، اگر ابزار پروژه پشتیبانی کند، ممکن است از افزایش حافظه مؤثرتر باشد.
۳. اگر ظرفیت کافی دارید، مقدار کنترلشده را آزمایش کنید
در یک کپی آزمایشی پروژه، و فقط پس از اطمینان از سهمیه و فضای کافی برای سایر فرایندها، مثال زیر یک سقف برای بخش old space تعیین میکند:
کد / دستورNODE_OPTIONS='--max-old-space-size=512' npm run build
عدد
512 بر حسب MiB و صرفاً مثال است، نه مقدار توصیهشده برای هر سرویس. این فرمان برای همان اجرا و فرایندهای فرزند، گزینه محیطی را تنظیم میکند. max-old-space-size سقف بخشی از حافظه V8 است و مصرف کل فرایند را به همین عدد محدود نمیکند. اگر پیش از آن گزینه متفاوتی در محیط وجود دارد، ابتدا اثر بازنویسی آن را با مسئول پروژه بررسی کنید.در PowerShell ویندوز میتوان در یک پنجره آزمایشی مقدار
$env:NODE_OPTIONS را تنظیم و پس از آزمون مقدار قبلی را بازگرداند. تنظیم روی لپتاپ اثبات نمیکند سهمیه هاست مقصد هم کافی است.۴. اگر build همچنان شکست میخورد
اگر با افزایش سنجیده heap خطا همچنان در همان مرحله تکرار میشود، گزارش build و حجم داده ورودی را بررسی کنید. یک افزونه ناسازگار، چرخه پردازش، فایل بسیار بزرگ یا نشت حافظه ممکن است علت باشد. در شاخه آزمایشی تغییرهای اخیر را مقایسه و بخش سنگین را جداگانه بسازید.
ساخت پروژه در محیطی با منابع کافی و انتقال خروجی ممکن است گزینه باشد، اما خروجی باید با سیستمعامل، معماری، نسخه Node و روش استقرار مقصد سازگار باشد. وابستگی بومی ساختهشده در ویندوز لزوماً روی لینوکس کار نمیکند. اگر سهمیه سرویس برای اجرای واقعی برنامه نیز کافی نیست، فقط انتقال خروجی مشکل اجرا را حل نمیکند.
اگر فرایند بدون پیام heap و با کلمه
Killed تمام میشود، زمان رخداد را با محدودیت حافظه حساب و گزارش مدیر میزبان تطبیق دهید؛ افزایش old space در این حالت ممکن است شرایط را بدتر کند. برای buildهای تکراری، خروجی و فایلهای موقت را طبق روش رسمی ابزار در کپی آزمایشی مدیریت کنید، نه با حذف پوشههای ناشناس نسخه فعال. پس از تغییر تنظیمات، زمان build و اوج مصرف را ثبت کنید تا معلوم شود اصلاح واقعاً اثر داشته است.۵. نتیجه را با build و اجرای واقعی تأیید کنید
پس از build موفق، آزمونهای پروژه و برنامه آزمایشی را با همان نسخه Node و تنظیم پنل اجرا کنید. نتیجه را از نظر مصرف حافظه و کارکرد مسیرهای اصلی ببینید و نسخه قبلی را برای بازگشت نگه دارید. اگر شکست هنگام نصب بسته رخ میدهد، راهنمای ENOMEM نصب npm را بخوانید.
امکانات هاست Node.js نتآرام و شرح گزینههای حافظه Node.js در دسترس است.
برچسبها:
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
