راهنمای کامل ساخت فضای Swap روی سرور لینوکس

آموزش گام‌به‌گام ساخت swap لینوکس، تعیین اندازه مناسب، تنظیم swappiness و رفع خطاهای رایج. راهکاری عملی برای جلوگیری از کرش سرور هنگام کمبود RAM.

۶ دقیقه به‌روزرسانی ۳۱ مرداد ۱۴۰۵

چرا به فضای Swap نیاز دارید؟

وقتی حافظه‌ی RAM سرور شما پر می‌شود، هسته‌ی لینوکس دو انتخاب دارد: یا فرایندها را با خطای Out Of Memory بکشد، یا بخشی از داده‌های کم‌استفاده را به دیسک منتقل کند. فضای swap لینوکس دقیقاً برای همین سناریو طراحی شده است. این فضا به‌عنوان حافظه‌ی کمکی عمل می‌کند و به سیستم اجازه می‌دهد تا وقتی RAM واقعی تمام می‌شود، به‌جای کرش ناگهانی، عملکرد خود را حفظ کند.

نکته‌ی مهم این است که swap جایگزین RAM نیست. سرعت خواندن/نوشتن روی دیسک (حتی NVMe) چند برابر کندتر از RAM است. اما در شرایط بحرانی، وجود swap می‌تواند تفاوت بین یک سرور زنده و یک سرور از کار افتاده باشد. به‌خصوص برای سرویس‌هایی مثل MySQL، Redis یا وب‌سرورهایی که ناگهان با ترافیک سنگین مواجه می‌شوند، داشتن swap یک بیمه‌ی حیاتی است.

چه زمانی ساخت Swap ضروری است؟

همه‌ی سرورها به swap نیاز ندارند، اما در این موارد حتماً باید آن را فعال کنید:

  • سرورهای با RAM کم (کمتر از 2GB): اگر سرور شما حافظه‌ی محدودی دارد، swap برای جلوگیری از کرش ضروری است.
  • برنامه‌های پرمصرف: دیتابیس‌ها، محیط‌های مجازی‌سازی و نرم‌افزارهای تحلیلی معمولاً به حافظه‌ی بیشتری از حد انتظار نیاز دارند.
  • سرورهای اشتراکی: اگر چند سرویس روی یک سرور اجرا می‌کنید، نوسانات مصرف RAM اجتناب‌ناپذیر است.
  • سیستم‌های حیاتی: برای سرورهایی که آپ‌تایم برایشان حیاتی است، swap یک لایه‌ی محافظتی اضافه می‌کند.

در مقابل، اگر سرور شما RAM بالای 16GB دارد و مصرف حافظه‌ی شما معمولاً زیر 70 درصد است، احتمالاً به swap نیاز چندانی ندارید. در این حالت، فعال کردن swap می‌تواند حتی عملکرد را کاهش دهد، چون هسته ممکن است داده‌های کم‌استفاده را به دیسک منتقل کند و بعداً برای بازگرداندن آن‌ها زمان تلف کند.

تعیین اندازه‌ی مناسب برای Swap

اندازه‌ی swap به دو عامل اصلی بستگی دارد: مقدار RAM و نوع workload. یک قانون قدیمی می‌گفت swap باید دو برابر RAM باشد، اما این قانون برای سیستم‌های مدرن منسوخ شده است. امروزه توصیه‌ی رایج به این شکل است:

  • RAM کمتر از 2GB: swap معادل 2 برابر RAM (مثلاً برای 1GB RAM، 2GB swap)
  • RAM بین 2 تا 8GB: swap معادل 1 تا 1.5 برابر RAM
  • RAM بین 8 تا 64GB: swap معادل 0.5 تا 1 برابر RAM
  • RAM بالای 64GB: swap معادل 0.25 تا 0.5 برابر RAM

برای مثال، یک سرور با 4GB RAM که MySQL و Nginx اجرا می‌کند، به 4 تا 6GB swap نیاز دارد. اما یک سرور با 32GB RAM که فقط یک وب‌اپلیکیشن سبک را سرو می‌کند، با 8GB swap هم کاملاً راضی است.

نکته‌ی مهم درباره‌ی Hibernation

اگر از قابلیت Hibernation (خواب زمستانی) استفاده می‌کنید، swap باید حداقل به اندازه‌ی RAM باشد تا بتواند کل محتوای حافظه را ذخیره کند. اما در سرورها معمولاً این قابلیت غیرفعال است، پس این مورد را فقط در دسکتاپ‌ها در نظر بگیرید.

روش‌های ساخت Swap در لینوکس

دو روش اصلی برای ایجاد swap وجود دارد: استفاده از پارتیشن اختصاصی یا فایل swap. روش فایل ساده‌تر و انعطاف‌پذیرتر است و بدون نیاز به پارتیشن‌بندی مجدد دیسک انجام می‌شود. در این آموزش از روش فایل استفاده می‌کنیم که برای اکثر سرورهای مجازی بهترین گزینه است.

مرحله ۱: بررسی وضعیت فعلی

قبل از هر کاری، وضعیت فعلی swap را بررسی کنید:

sudo swapon --show
free -h

اگر خروجی swapon --show خالی بود، یعنی swap فعال نیست. دستور free -h هم اطلاعات کامل حافظه را نشان می‌دهد.

مرحله ۲: ایجاد فایل Swap

برای ایجاد یک فایل swap به اندازه‌ی 4GB، از دستور fallocate استفاده کنید:

sudo fallocate -l 4G /swapfile

اگر fallocate در سیستم شما کار نکرد (مثلاً در برخی فایل‌سیستم‌های قدیمی)، از دستور dd استفاده کنید:

sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

دستور دوم 4096 بلاک 1 مگابایتی می‌نویسد که مجموعاً 4GB می‌شود. دقت کنید که فایل swap را روی دیسک با فضای کافی ایجاد کنید. با دستور df -h فضای خالی را بررسی کنید.

مرحله ۳: تنظیم دسترسی‌ها

فایل swap حاوی داده‌های حساس است، پس باید دسترسی‌ها را محدود کنید:

sudo chmod 600 /swapfile

این دستور فقط root را قادر به خواندن و نوشتن فایل می‌کند.

مرحله ۴: فرمت و فعال‌سازی

فایل را به‌عنوان swap فرمت کنید و سپس فعالش کنید:

sudo mkswap /swapfile
sudo swapon /swapfile

خروجی mkswap باید چیزی شبیه به این باشد:

Setting up swapspace version 1, size = 4 GiB (4294967296 bytes)
no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

مرحله ۵: فعال‌سازی دائمی

برای اینکه بعد از ریبوت سرور، swap به‌صورت خودکار فعال شود، فایل /etc/fstab را ویرایش کنید:

sudo nano /etc/fstab

و این خط را به انتهای فایل اضافه کنید:

/swapfile none swap sw 0 0

با دستور sudo swapon --show و free -h دوباره وضعیت را بررسی کنید تا مطمئن شوید swap به‌درستی فعال شده است.

تنظیم swappiness: کلید بهینه‌سازی عملکرد

پارامتر swappiness تعیین می‌کند که هسته‌ی لینوکس چقدر تمایل دارد از swap استفاده کند. مقدار آن بین 0 تا 100 است:

  • 0: تقریباً هرگز از swap استفاده نمی‌کند (فقط در شرایط بحرانی)
  • 10: مقدار پیشنهادی برای سرورهای دیتابیس و برنامه‌های حساس به latency
  • 60: مقدار پیش‌فرض در اکثر توزیع‌ها (مناسب برای دسکتاپ)
  • 100: استفاده‌ی تهاجمی از swap (مناسب برای سیستم‌هایی که RAM خیلی کمی دارند)

برای مشاهده‌ی مقدار فعلی:

cat /proc/sys/vm/swappiness

برای تغییر موقت (تا ریبوت بعدی):

sudo sysctl vm.swappiness=10

برای تغییر دائمی، فایل /etc/sysctl.conf را ویرایش کنید:

sudo nano /etc/sysctl.conf

و این خط را اضافه کنید:

vm.swappiness=10

سپس تغییرات را اعمال کنید:

sudo sysctl -p

مقدار swappiness مناسب برای سرور شما

اگر سرور شما دیتابیس اجرا می‌کند (MySQL، PostgreSQL)، مقدار 10 بهترین گزینه است. این مقدار باعث می‌شود هسته تا حد ممکن از RAM استفاده کند و فقط در مواقع ضروری به swap مراجعه کند. برای وب‌سرورهای عمومی، مقدار 20 تا 30 تعادل خوبی است. اگر RAM خیلی کمی دارید (کمتر از 1GB)، مقدار 60 تا 80 می‌تواند از کرش جلوگیری کند، اما با کاهش سرعت همراه خواهد بود.

خطاهای رایج و رفع آن‌ها

خطای "swapon failed: Invalid argument"

این خطا معمولاً به‌خاطر فرمت نادرست فایل یا استفاده از فایل‌سیستم‌های پشتیبانی‌نشده رخ می‌دهد. مطمئن شوید که mkswap را اجرا کرده‌اید و فایل روی فایل‌سیستم ext4 یا xfs قرار دارد. فایل‌سیستم‌هایی مثل FAT32 و NTFS از swap پشتیبانی نمی‌کنند.

خطای "swapon failed: No space left on device"

این خطا نشان می‌دهد که دیسک شما فضای کافی ندارد. با df -h فضای خالی را بررسی کنید و یا فایل swap کوچک‌تری بسازید.

مشکل: swap بعد از ریبوت غیرفعال می‌شود

اگر بعد از ریبوت، swap فعال نیست، احتمالاً خط مربوط به /etc/fstab را اشتباه نوشته‌اید. دقت کنید که مسیر فایل دقیقاً درست باشد و از سینتکس صحیح استفاده کنید. با دستور cat /etc/fstab محتوا را بررسی کنید.

نکته‌ی مهم درباره‌ی SSD و Flash Storage

استفاده‌ی زیاد از swap روی SSD می‌تواند طول عمر دیسک را کاهش دهد، چون هر بار نوشتن روی سلول‌های حافظه، آن‌ها را فرسوده می‌کند. اگر سرور شما SSD دارد، سعی کنید swappiness را پایین نگه دارید و مطمئن شوید که swap واقعاً فقط در مواقع ضروری استفاده می‌شود. برای مانیتورینگ مصرف swap می‌توانید از دستور vmstat 5 استفاده کنید و ستون si و so را زیر نظر بگیرید.

جمع‌بندی

ساخت فضای swap لینوکس یک عملیات ساده اما حیاتی است که می‌تواند سرور شما را از کرش‌های ناگهانی نجات دهد. با دنبال کردن مراحل این آموزش، می‌توانید در کمتر از ۵ دقیقه swap را روی سرور خود فعال کنید. به یاد داشته باشید که اندازه‌ی مناسب و تنظیم swappiness به‌اندازه‌ی خود ساخت swap اهمیت دارد. اگر سرور شما از حافظه‌ی کافی برخوردار است و workload سبکی دارد، شاید اصلاً به swap نیاز نداشته باشید. اما برای اکثر سرورهای تولیدی، داشتن swap یک اقدام پیشگیرانه‌ی هوشمندانه است.

اگر به دنبال زیرساخت ابری با پیکربندی بهینه برای سرورهای لینوکسی هستید، سرویس‌های سرور مجازی و اختصاصی سرورنت می‌توانند گزینه‌ی مناسبی باشند. اما در هر صورت، این آموزش را می‌توانید روی هر سرور لینوکسی که در اختیار دارید پیاده‌سازی کنید.

آیا این مطلب برایتان مفید بود؟