3.3 KiB
Executable file
راهنمای حل مشکل OOM (Out of Memory) در Build Flutter Web
مشکل
خطای exit code -9 در هنگام build کردن Flutter Web معمولاً به معنای OOM (Out of Memory) است. این خطا زمانی رخ میدهد که:
- سیستم حافظه کافی ندارد
optimization-level 4حافظه بسیار زیادی مصرف میکند- Swap file وجود ندارد یا کافی نیست
راهحلهای اعمال شده
1. کاهش Optimization Level
در فایل build_web.sh، optimization-level از 4 به 2 کاهش یافته است:
- قبل:
--optimization-level 4(نیاز به حافظه بسیار زیاد) - بعد:
--optimization-level 2(متعادل و کافی برای production)
این تغییر باعث کاهش مصرف حافظه میشود در حالی که هنوز بهینهسازی کافی برای production را فراهم میکند.
2. اضافه کردن بررسی حافظه
قبل از build، وضعیت حافظه سیستم بررسی میشود تا کاربر از وضعیت سیستم مطلع شود.
3. اسکریپت تنظیم Swap
اسکریپت check_and_setup_swap.sh برای ایجاد و فعالسازی swap file ایجاد شده است.
استفاده
راهحل سریع (توصیه میشود)
# فقط build را دوباره اجرا کنید
cd /var/www/ark
./build_web.sh
راهحل کامل (در صورت نیاز)
اگر هنوز مشکل دارید، swap file را تنظیم کنید:
# ایجاد swap file به اندازه 4GB (پیشفرض)
sudo /var/www/ark/check_and_setup_swap.sh
# یا با اندازه دلخواه (مثلاً 8GB)
sudo /var/www/ark/check_and_setup_swap.sh 8
سپس build را دوباره اجرا کنید:
cd /var/www/ark
./build_web.sh
بررسی وضعیت
بررسی حافظه:
free -h
بررسی swap:
swapon --show
بررسی فضای دیسک:
df -h
نکات مهم
-
Optimization Level 2 کافی است: برای اکثر پروژهها، level 2 بهینهسازی کافی را فراهم میکند و نیازی به level 4 نیست.
-
Swap File: اگر سیستم شما RAM کمی دارد (کمتر از 8GB)، حتماً swap file را تنظیم کنید.
-
پاک کردن Cache: در صورت نیاز، میتوانید cache را پاک کنید:
cd /var/www/ark/hesabixUI/hesabix_ui flutter clean flutter pub get -
Build با Profile Mode: برای تست، میتوانید از profile mode استفاده کنید که حافظه کمتری مصرف میکند:
./build_web.sh --mode profile
تغییرات در build_web.sh
- کاهش
optimization-levelاز 4 به 2 - اضافه شدن بررسی حافظه قبل از build
- اضافه شدن تنظیمات محیطی برای dart compile js
نتیجه
با این تغییرات، build باید بدون خطای OOM انجام شود. اگر هنوز مشکل دارید:
- Swap file را تنظیم کنید
- حافظه سیستم را بررسی کنید
- از profile mode برای تست استفاده کنید