Swap در لینوکس چیست؟ آموزش ساخت، افزایش و تنظیم Swap

Swap در لینوکس چیست

اگر رم سرور شما پر شود، چه پیش می‌آید؟ بدون فضای Swap، کرنل لینوکس چاره‌ای ندارد جز متوقف‌کردن فرآیندهای در حال اجرا، و در نهایت هم سرور از دسترس خارج می‌شود. Swap در لینوکس در واقع بخشی از دیسک ذخیره‌سازی است که کنار رم می‌نشیند و نقش حافظه‌ی کمکی را ایفا می‌کند؛ وقتی حافظه‌ی فیزیکی پر می‌شود، داده‌های غیرفعال را موقتاً همان‌جا نگه می‌دارد. همین ویژگی ساده باعث می‌شود سرور مجازی لینوکس شما زیر فشار حافظه دوام بیاورد و سرویس‌ها بدون وقفه به کار خود ادامه دهند. در ادامه، اول می‌بینیم Swap دقیقاً چطور کار می‌کند، بعد قدم‌به‌قدم می‌رویم سراغ ساخت، افزایش، تنظیم و حذف آن روی اوبونتو، دبیان و توزیع‌های مشابه.

Swap در لینوکس چیست؟

Swap در لینوکس ناحیه‌ای از فضای ذخیره‌سازی (HDD یا SSD) است که سیستم‌عامل آن را مثل ادامه‌ی حافظه فیزیکی (RAM) به کار می‌گیرد. رم سریع است، اما گران و محدود؛ دیسک برعکس، ارزان و فراوان است ولی به مراتب کندتر. وقتی رم دارد پر می‌شود، کرنل لینوکس صفحاتی از حافظه را که کمتر به کارشان بوده انتخاب می‌کند و به فضای Swap می‌فرستد تا جا برای داده‌های فعال باز شود؛ به همین جابه‌جایی «swapping» می‌گویند.

اما نکته‌ی مهم این‌جاست: Swap هیچ‌وقت جایگزین رم نمی‌شود؛ کارش بیشتر شبیه ضربه‌گیر است، یک «اتاق تنفس» برای لحظات بحرانی. یعنی Swap ابزاری‌ست برای پایداری، نه برای سرعت.

Swap در لینوکس چیست

Swap چگونه کار می‌کند؟

در سطح فنی، لینوکس حافظه را به واحدهای کوچکی به نام صفحه تقسیم می‌کند. حالا فرض کنید برنامه‌ای به حافظه‌ی بیشتری نیاز دارد و رمِ خالی کافی نیست؛ این‌جا کرنل صفحاتی را که مدتی دست‌نخورده مانده‌اند پیدا می‌کند و روی Swap می‌نویسد. به این کار می‌گویند swap out. بعداً اگر همان صفحه دوباره لازم شد، از Swap به رم برمی‌گردد؛ این یکی هم swap in نام دارد.

مشکل این‌جاست که خواندن و نوشتن روی دیسک، در قیاس با رم، خیلی کندتر است؛ پس اگر Swap زیادی مصرف شود، افت سرعت کاملاً محسوس خواهد بود. کرنل هم همین را می‌داند، برای همین سعی می‌کند فقط در شرایط ضروری سراغ Swap برود. این رفتار را پارامتری به اسم Swappiness کنترل می‌کند که کمی جلوتر سراغش می‌رویم.

Swap در لینوکس چگونه کار می‌کند

تفاوت RAM و Swap چیست؟

رم یک حافظه‌ی فیزیکی و بسیار سریع است؛ پردازنده مستقیم به آن دسترسی دارد. Swap اما روی دیسک نشسته و سرعتش قابل‌مقایسه با رم نیست. یک تفاوت دیگر هم هست: رم با خاموش‌شدن سیستم پاک می‌شود، یعنی فرّار است، در حالی که هر چه روی دیسک بنشیند می‌ماند. در عمل هم Swap فقط وقتی وارد میدان می‌شود که رم زیر فشار باشد و دیگر از پس پردازش مستقیم برنمی‌آید؛ نمی‌تواند جای رم را بگیرد. پس اگر می‌بینید سرور شما مدام از Swap استفاده می‌کند، مسئله را با بزرگ‌کردن Swap حل نکنید — بروید سراغ ارتقای رم مورد نیاز سرور مجازی. جدول زیر این تفاوت‌ها را کنار هم می‌گذارد:

معیار RAM Swap
محل قرارگیری حافظه فیزیکی (تراشه)، مستقیماً در دسترس پردازنده بخشی از دیسک ذخیره‌سازی (HDD یا SSD)
سرعت بسیار سریع به مراتب کندتر از رم
فرّار بودن فرّار؛ با خاموش شدن سیستم پاک می‌شود ماندگار؛ داده‌ها روی دیسک باقی می‌مانند
هزینه گران و محدود ارزان و فراوان

Swap در سرور مجازی چه کاربردی دارد؟

در یک VPS، رم همیشه محدود است و معمولاً نمی‌شود هر لحظه که خواستید آن را زیاد کنید. این‌جاست که Swap به‌عنوان یک لایه‌ی ایمنی وارد عمل می‌شود — وقتی ترافیک ناگهان بالا می‌رود یا چند سرویس هم‌زمان اجرا می‌شوند، جلوی از کار افتادن سرور را می‌گیرد. اگر Swap را درست پیکربندی کنید، پایداری و دسترس‌پذیری سرویس‌ها واقعاً فرق می‌کند. مهم‌ترین کاربردهایش این‌هاست:

  • جلوگیری از خطای Out-of-Memory (OOM): اگر رم کاملاً پر شود، کرنل به‌جای این‌که یک‌دفعه فرآیندها را بکشد، اول سراغ Swap می‌رود و سیستم را سرپا نگه می‌دارد. روی سرورهای تولیدی که هر دقیقه توقفشان هزینه دارد، این یک مزیت واقعی است.
  • مقابله با جهش ناگهانی ترافیک: بازدید سایت که یک‌هو بالا برود، حافظه هم به همان سرعت مصرف می‌شود. این‌جا Swap کمک می‌کند سرویس‌ها به‌جای خاموش‌شدن، کمی کندتر ولی فعال بمانند.
  • نگهداری داده‌های کم‌مصرف: بخشی از حافظه همیشه به‌ندرت به کار می‌آید — مثلاً قسمت‌هایی از یک برنامه که به‌ندرت اجرا می‌شوند. این صفحات که بروند سراغ Swap، رم برای داده‌های داغ و پرکاربرد خالی می‌شود.
  • ایمنی موقع به‌روزرسانی و نصب: به‌روزرسانی پکیج‌ها یا گرفتن بکاپ، گاهی برای چند دقیقه رم زیادی مصرف می‌کند. Swap دقیقاً همین بازه‌های کوتاه را پوشش می‌دهد و نمی‌گذارد سرور قطع شود.

تفاوت Swap File و Swap Partition

برای ساخت فضای Swap دو راه پیش رو دارید: یک فایل ساده در فایل‌سیستم (Swap File)، یا یک پارتیشن مستقل (Swap Partition). زمانی پارتیشن روش استاندارد بود، اما این روزها روی اکثر سرورهای مجازی و توزیع‌های مدرن، فایل Swap به‌خاطر انعطاف‌پذیری بیشترش ترجیح داده می‌شود. مقایسه‌ی کامل‌تر را در جدول زیر می‌بینید:

معیار Swap File Swap Partition
ساخت و تغییر اندازه بسیار ساده و سریع دشوار و نیازمند بازچینی پارتیشن
انعطاف‌پذیری بالا؛ امکان ساخت چند فایل هم‌زمان محدود به تعداد پارتیشن‌ها
کارایی تقریباً برابر با پارتیشن در کرنل‌های مدرن کمی بهتر در بارهای سنگین قدیمی
مناسب برای VPS بله؛ روش پیش‌فرض و رایج کمتر رایج؛ بیشتر مناسب سرورهای اختصاصی

آموزش ساخت Swap در لینوکس

ساخت Swap با فایل، ساده‌ترین و رایج‌ترین راه روی اوبونتو، دبیان و بیشتر توزیع‌های مدرن است. قبل از هر چیز، وضعیت فعلی را چک کنید:

sudo swapon --show
free -h

اگر خروجی swapon –show خالی بود، یعنی فعلاً هیچ Swap فعالی ندارید و مراحل کار این‌طور است:

  • ایجاد فایل Swap: اول یک فایل با اندازه‌ی دلخواه بسازید؛ دستور زیر مثلاً یک فایل ۴ گیگابایتی می‌سازد. اگر فایل‌سیستمتان fallocate را پشتیبانی نمی‌کند، دستور dd هم جواب می‌دهد، فقط کمی کندتر است.
sudo fallocate -l 4G /swapfile
  • محدود کردن دسترسی: برای امنیت بیشتر، فقط کاربر ریشه (root) اجازه‌ی خواندن و نوشتن داشته باشد؛ بقیه‌ی کاربران نباید بتوانند محتوای Swap را ببینند.
sudo chmod 600 /swapfile
  • فرمت کردن فایل: حالا با دستور mkswap فایل را برای نقش Swap آماده کنید.
sudo mkswap /swapfile
  • فعال‌سازی: با swapon فایل را فعال کنید و دوباره خروجی را چک کنید تا مطمئن شوید کار کرده.
sudo swapon /swapfile
sudo swapon --show
  • افزایش اندازه‌ی Swap: بعداً اگر فضای بیشتری خواستید، اول فایل قبلی را با swapoff غیرفعال و حذف کنید، بعد همین مراحل را برای یک فایل بزرگ‌تر تکرار کنید.

چگونه Swap را بعد از Restart سرور حفظ کنیم؟

فعال‌سازی با swapon فقط تا ریبوت بعدی دوام دارد، همین. برای این‌که ماندگار بماند، باید فایل Swap را در ⁦/etc/fstab⁩ ثبت کنید:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

از این به بعد، هر بار سیستم بالا بیاید، فایل Swap خودش فعال می‌شود. برای اطمینان، یا سرور را یک بار ریبوت کنید، یا دستورهای swapon –show و free -h را دوباره بزنید. حالا که این‌جا هستیم، بد نیست پارامتر Swappiness را هم تنظیم کنید — همان چیزی که تعیین می‌کند لینوکس چقدر مایل است سراغ Swap برود. برای سرورها معمولاً ۱۰ عدد خوبی است:

sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

با این تنظیم، سیستم تا جایی که بشود از رم سریع استفاده می‌کند و فقط در شرایط اضطراری سراغ Swap می‌رود؛ دقیقاً همان رفتاری که برای پایداری و عملکرد کانفیگ سرور می‌خواهید.

جمع‌بندی

در یک جمله: Swap ابزاری ساده اما مهم برای پایداری سرور است، نه جایگزین رم. یک فایل Swap با اندازه‌ی مناسب بسازید، آن را در fstab ثبت کنید، Swappiness را هم تنظیم کنید — همین کافی است تا سرور مجازی‌تان جلوی خطاهای حافظه و جهش‌های ناگهانی ترافیک دوام بیاورد. بعد از این تنظیمات، بد نیست عملکرد سرور را با ابزارهایی مثل تست سرعت سرور مجازی هم بسنجید تا از پایداری‌اش مطمئن شوید. فقط یادتان باشد: اگر سرور شما همیشه به Swap متکی است، راه‌حل واقعی بزرگ‌کردن فایل Swap نیست، ارتقای رم است.

 

سوالات متداول

آیا افزایش Swap باعث سریع‌تر شدن سرور می‌شود؟

نه. دیسک آن‌قدر از رم کندتر است که Swap هیچ‌وقت نمی‌تواند سرعت پردازش را بالا ببرد؛ کارش چیز دیگری‌ست — پایدار نگه‌داشتن سیستم و جلوگیری از توقف کامل وقتی حافظه کم می‌آید. اگر سرور شما مدام از Swap استفاده می‌کند، بزرگ‌ترش نکنید، رم را زیاد کنید.

چگونه فضای Swap را به‌طور کامل حذف کنیم؟

اول با sudo swapoff /swapfile غیرفعالش کنید، بعد خط مربوطه را از ⁦/etc/fstab⁩ پاک کنید، و در آخر با sudo rm /swapfile خود فایل را حذف کنید. فقط قبلش مطمئن شوید رمِ فعلی سرور برای بار کاری‌تان کافی است، وگرنه ممکن است سیستم یک‌دفعه متوقف شود.

آیا بهتر است Swap روی SSD باشد یا HDD؟

SSD معمولاً سریع‌تر است و تأخیرش کمتر، ولی نوشتن مداوم رویش کم‌کم عمر سلول‌ها را می‌کاهد. روی سرورهای مجازی مدرن که دیسکشان NVMe است، گذاشتن Swap روی SSD کاملاً منطقی است؛ فقط با یک Swappiness پایین جلوی استفاده‌ی زیادش را بگیرید.

آیا برای سرورهایی با رم بالا هم Swap لازم است؟

بله. حتی با ۱۶ یا ۳۲ گیگابایت رم، داشتن یک Swap کوچک — مثلاً ۴ گیگابایت — به‌عنوان لایه‌ی ایمنی توصیه می‌شود. هزینه‌ی چندانی هم ندارد، اما جلوی توقف ناگهانی سرویس‌ها را در به‌روزرسانی‌های سنگین یا ترافیک غیرمنتظره می‌گیرد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

3 × 3 =