ساخت swap روی سرور لینوکس (رفع کمبود رم و خطای Out of Memory)
روی سرورهای کوچک (۱ تا ۲ گیگابایت رم) وقتی حافظه تمام شود، هسته پردازشها را (معمولاً MySQL) میکشد. یک فایل swap مانند حافظهٔ اضطراری عمل میکند و از این کرشها جلوگیری میکند.
۱بررسی وضعیت فعلی
ببینید swap دارید یا نه و رم چقدر است.
free -h
swapon --show
df -h /۲ساخت فایل swap
اندازه معمولاً برابر رم یا نصف رم است (برای سرور ۱ گیگی، ۲ گیگ). fallocate سریع است.
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfileاگر fallocate روی فایلسیستم شما کار نکرد: sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
۳دائمی کردن بعد از ریبوت
خط زیر را به /etc/fstab اضافه کنید. ابتدا از فایل بکاپ بگیرید.
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo swapon --show۴تنظیم swappiness
این مقدار (۰ تا ۱۰۰) تعیین میکند هسته چقدر مایل به استفاده از swap است. برای سرور مقدار ۱۰ مناسب است؛ یعنی فقط وقتی رم رو به اتمام است از swap استفاده کند.
cat /proc/sys/vm/swappiness
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system۵تأیید
swap باید در free نمایش داده شود.
free -h
vmstat 1 5۶حذف swap (در صورت نیاز)
برای حذف: غیرفعال کنید، خط fstab را پاک کنید و فایل را حذف کنید.
sudo swapoff /swapfile
sudo sed -i '\|/swapfile|d' /etc/fstab
sudo rm /swapfileقبل از swapoff مطمئن شوید رم کافی وجود دارد، وگرنه سیستم کند یا OOM میشود.
پرسشهای پرتکرار دربارهٔ ساخت swap روی سرور لینوکس (رفع کمبود رم و خطای Out of Memory)
آیا swap روی SSD به آن آسیب میزند؟
استفادهٔ عادی و کم از swap برای SSD های امروزی مشکلی ایجاد نمیکند. swap برای جلوگیری از کرش است نه برای جبران دائمی کمبود رم؛ اگر مدام swap پر میشود باید رم را بیشتر کنید.