ساخت swap روی سرور لینوکس (رفع کمبود رم و خطای Out of Memory)

روی سرورهای کوچک (۱ تا ۲ گیگابایت رم) وقتی حافظه تمام شود، هسته پردازش‌ها را (معمولاً MySQL) می‌کشد. یک فایل swap مانند حافظهٔ اضطراری عمل می‌کند و از این کرش‌ها جلوگیری می‌کند.

دیسک و ذخیره‌سازیمقدماتی5 دقیقه

۱بررسی وضعیت فعلی

ببینید swap دارید یا نه و رم چقدر است.

bash
free -h
swapon --show
df -h /

۲ساخت فایل swap

اندازه معمولاً برابر رم یا نصف رم است (برای سرور ۱ گیگی، ۲ گیگ). fallocate سریع است.

bash
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 اضافه کنید. ابتدا از فایل بکاپ بگیرید.

bash
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 استفاده کند.

bash
cat /proc/sys/vm/swappiness
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system

۵تأیید

swap باید در free نمایش داده شود.

bash
free -h
vmstat 1 5

۶حذف swap (در صورت نیاز)

برای حذف: غیرفعال کنید، خط fstab را پاک کنید و فایل را حذف کنید.

bash
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 پر می‌شود باید رم را بیشتر کنید.