خطای npm build کلودلینوکس WebAssembly.instantiate Out of memory: Cannot allocate Wasm memory for new instance

اگر شما هاست سیپنل nodejs با Cloud Linux دارید که زمان اجرای npm run build در ترمینال هاست خطای WebAssembly.instantiate Out of memory: Cannot allocate Wasm memory for new instance دریافت میکنید با این آموزش همراه باشید.
npm run build > nikan@0.1.0 build > next build unhandledRejection RangeError: WebAssembly.instantiate(): Out of memory: Cannot allocate Wasm memory for new instance at lazyllhttp (../../nodevenv/public_html/app/20/lib/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js:65:3)
حتی اگر Cagefs را برای این یوزرغیرفعال کنید و محدودیت LVE را برای این کاربر غیرفعال کنید باز هم فایدهای ندارد.
چون وقتی در Terminal این هاست، بعد از اینکه وارد مد environment شوید و دستور زیر را اجرا کنید متوجه محدودیت خواهید شد:
ابتدا طبق استاندارد کلودلینوکس باید وارد محیط env شویم:
source /home/devuser/nodevenv/public_html/app/20/bin/activate && cd /home/devuser/public_html/app
دستور بالا را میتوانید در تنظیمات اپلیکیشن نود جی اس دریافت کنید. مسیر Setup Node.js App سپس ویرایش اپلیکیشنی که قبلا ایجاد کرده اید.

پس از ویرایش اپلیکیشن کادر زیر را مشاهده خواهید کرد

دستور بالا را کپی کنید و سپس به ترمینال همین هاست برگردید و این دستور را وارد کنید. تا وارد محیط virtual environment شوید. سپس دستور زیر را وارد کنید.
ulimit -a | grep memory

طبق خروجی دستور ۴ گیگ محدودیت برای این محیط virtual env وجود دارد.
حتی اگر lvectl
و limits.conf
آزاد باشند، مادامی که PAM از pam_lve.so
استفاده کند، مقدار max memory
در زمان login محدود به مقدار پیشفرض (معمولاً 4GB) باقی میماند.
دستور زیر را در یوزر root سرور اجرا کنید:
grep pam_lve /etc/pam.d/*
خروجی زیر را مشاهده خواهید کرد

اگر خروجی چیزی شبیه این بود:
/etc/pam.d/atd:session required pam_lve.so 500 1 /etc/pam.d/crond:session required pam_lve.so 500 1 /etc/pam.d/sshd:session required pam_lve.so 500 1 /etc/pam.d/su:session required pam_lve.so 500 1
پس این دقیقاً دلیل محدود ماندن رم است.
غیرفعال کردن LVE PAM برای این کاربر خاص
یک فایل جدید ایجاد کنید مثلا:
nano /etc/profile.d/unlimit_mifadev.sh
داخل این فایل مقدار زیر را قرار دهید:
if [ "$USER" = "mifadev" ]; then ulimit -m unlimited ulimit -v unlimited export NODE_OPTIONS="--max-old-space-size=8192" fi
سپس در فایل /etc/pam.d/sshd
(اگر از SSH استفاده میکنید) یا /etc/pam.d/login
، خط مربوط به pam_lve.so
را موقتاً کامنت کنید و دوباره لاگین شوید:
# session required pam_lve.so
حالا اگر وارد ترمینال و محیط env آن هاست شوید و دستور زیر را اجرا کنید، دیگر محدودیت ۴ گیگ مشاهده نخواهد شد و خطای npm run هم برطرف می شود.
ulimit -a | grep memory

طبق این آموزش مشکل خطای npm build کلودلینوکس WebAssembly.instantiate Out of memory: Cannot allocate Wasm memory for new instance برطرف شد.
موفق باشید.