لینوکس

آموزش ساخت Swap در Ubuntu؛ جلوگیری از Out of Memory در VPS

در این آموزش یاد می‌گیریم Swap چیست، چه زمانی روی VPS به آن نیاز داریم و چگونه یک Swap File امن و دائمی در Ubuntu بسازیم، اندازه آن را بررسی کنیم و Swappiness را تنظیم کنیم.

آموزش ساخت Swap در Ubuntu؛ جلوگیری از Out of Memory در VPS
ارشیا درستکار
ارشیا درستکار
نویسنده و کارشناس
43 دقیقه • ۸ آبان ۱۴۰۵• ۱۳

اگر یک VPS با RAM محدود داشته باشید، ممکن است هنگام اجرای سرویس‌هایی مثل دیتابیس، Docker، Node.js یا حتی عملیات‌هایی مثل Build و Update ناگهان با کمبود حافظه روبه‌رو شوید.

در چنین شرایطی Linux می‌تواند از فضایی روی Disk به نام Swap کمک بگیرد.

Swap جای RAM واقعی را نمی‌گیرد و استفاده از SSD یا NVMe به‌عنوان Swap هرگز به سرعت حافظه RAM نیست؛ اما در بعضی شرایط می‌تواند به سیستم فرصت بدهد فشار حافظه را مدیریت کند و احتمال از کار افتادن ناگهانی Processها بر اثر کمبود RAM را کاهش دهد.

در این آموزش ابتدا بررسی می‌کنیم سرور شما Swap دارد یا نه، سپس یک Swap File در Ubuntu ایجاد می‌کنیم، Permission آن را ایمن می‌کنیم، Swap را فعال می‌کنیم و در نهایت کاری می‌کنیم بعد از Restart سرور نیز باقی بماند.

همچنین درباره swappiness، تغییر اندازه Swap، حذف Swap و خطاهای رایج صحبت می‌کنیم.

نکته مهم: Swap راه‌حل کمبود دائمی RAM نیست. اگر سرور شما دائماً از Swap استفاده می‌کند و با فشار حافظه مواجه است، ممکن است لازم باشد مصرف سرویس‌ها را بهینه کنید یا RAM بیشتری برای VPS در نظر بگیرید.

Swap چیست؟

Swap بخشی از فضای ذخیره‌سازی سیستم است که Linux می‌تواند در شرایط مشخص از آن برای مدیریت صفحات حافظه استفاده کند.

به زبان ساده، ساختار را می‌توان این‌طور تصور کرد:

RAM
↓
حافظه سریع اصلی سیستم

Swap
↓
فضایی روی Disk برای کمک به مدیریت فشار حافظه

RAM بسیار سریع‌تر از Disk است؛ بنابراین Swap نباید به‌عنوان «RAM اضافه با همان سرعت» در نظر گرفته شود.

هدف اصلی Swap این نیست که یک VPS با ۱ گیگابایت RAM را دقیقاً مانند سروری با چند گیگابایت RAM واقعی کند.

Swap بیشتر یک ابزار مدیریت حافظه است.

Swap File چیست؟

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

دو حالت شناخته‌شده عبارت‌اند از:

  • Swap Partition

  • Swap File

Swap Partition یک پارتیشن جداگانه روی Storage است.

اما Swap File یک فایل معمولی روی فایل‌سیستم است که برای Swap آماده و فعال می‌شود.

در بسیاری از VPSها مدیریت Swap File راحت‌تر است؛ چون می‌توان بدون تغییر Partition Table یک فایل ایجاد، حذف یا اندازه آن را تغییر داد.

در این مقاله از Swap File استفاده می‌کنیم.

آیا VPS من از قبل Swap دارد؟

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

دستور زیر را اجرا کنید:

sudo swapon --show

اگر Swap فعال باشد، اطلاعات آن نمایش داده می‌شود.

برای مثال:

NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2

اگر خروجی خالی باشد، احتمالاً Swap فعالی روی سیستم وجود ندارد.

روش دیگر:

free -h

نمونه خروجی:

               total        used        free      shared  buff/cache   available
Mem:           1.9Gi       820Mi       240Mi        20Mi       900Mi       850Mi
Swap:             0B          0B          0B

در این مثال:

Swap: 0B

یعنی Swap فعالی وجود ندارد.

همچنین می‌توانید بررسی کنید:

cat /proc/swaps

قبل از ساخت Swap، فضای Disk را بررسی کنید

Swap File از فضای Disk استفاده می‌کند.

بنابراین قبل از ساخت یک فایل چند گیگابایتی بررسی کنید فضای آزاد کافی دارید:

df -h /

نمونه:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        40G   12G   26G  32% /

در این مثال فضای کافی برای یک Swap File چند گیگابایتی وجود دارد.

اما اگر Disk شما تقریباً پر باشد، ایجاد Swap بزرگ می‌تواند مشکل دیگری ایجاد کند.

برای مشاهده کلی فایل‌سیستم‌ها:

df -h

Swap چقدر باید باشد؟

یک عدد ثابت برای تمام سرورها وجود ندارد.

اندازه مناسب Swap به عوامل مختلف بستگی دارد:

  • مقدار RAM

  • نوع Workload

  • مقدار فضای Disk

  • سرعت Storage

  • وجود یا عدم وجود Memory Limit برای سرویس‌ها

  • نیاز یا عدم نیاز به Hibernation

  • رفتار اپلیکیشن هنگام کمبود حافظه

برای یک VPS معمولی بدون Hibernation می‌توانید به‌جای استفاده از یک قانون ثابت، وضعیت واقعی مصرف RAM را بررسی کنید و یک Swap File معقول به‌عنوان نقطه شروع بسازید.

برای مثال، روی VPSهای کوچک یک Swap File حدود 1 تا 2 گیگابایت در بسیاری از سناریوها می‌تواند نقطه شروع عملی باشد؛ اما این مقدار یک قانون عمومی نیست.

اگر سرور دائماً چند گیگابایت Swap مصرف می‌کند، بهتر است علت مصرف RAM بررسی شود.

برای انتخاب منابع سرور می‌توانید مقاله راهنمای انتخاب منابع VPS؛ چقدر RAM، CPU و فضای دیسک نیاز داریم؟ را نیز مطالعه کنید.

مرحله اول: بررسی RAM فعلی سرور

ابتدا:

free -h

را اجرا کنید.

برای اطلاعات دقیق‌تر:

cat /proc/meminfo

اگر فقط چند مقدار مهم را می‌خواهید:

grep -E 'MemTotal|MemAvailable|SwapTotal|SwapFree' /proc/meminfo

این مرحله کمک می‌کند قبل و بعد از ایجاد Swap وضعیت سیستم را مقایسه کنید.

مرحله دوم: بررسی Swap موجود

دوباره اجرا کنید:

sudo swapon --show

اگر از قبل Swap دارید، بدون بررسی Swap جدید نسازید.

ممکن است سیستم دارای:

  • Swap File

  • Swap Partition

  • چند Swap Area

باشد.

برای مشاهده تمام Swapهای فعال:

cat /proc/swaps

مرحله سوم: ساخت Swap File

در این مثال یک Swap File با اندازه 2 GiB می‌سازیم.

برای ایجاد فایل با dd:

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

این دستور فایلی با مسیر زیر ایجاد می‌کند:

/swapfile

و اندازه آن تقریباً 2 GiB خواهد بود.

بعد از اتمام، اندازه فایل را بررسی کنید:

ls -lh /swapfile

نمونه:

-rw-r--r-- 1 root root 2.0G ... /swapfile

اما هنوز این فایل آماده استفاده به‌عنوان Swap نیست.

چرا از dd استفاده کردیم؟

ممکن است آموزش‌هایی ببینید که Swap File را با دستور زیر می‌سازند:

sudo fallocate -l 2G /swapfile

این روش روی بسیاری از فایل‌سیستم‌ها کار می‌کند و سریع است.

با این حال Swap File محدودیت‌هایی درباره فایل‌های دارای Hole، Preallocation و بعضی فایل‌سیستم‌های Copy-on-Write دارد.

به همین دلیل در این آموزش از dd استفاده می‌کنیم که برای ساخت Swap File روش قابل‌حمل‌تری است.

اگر دقیقاً می‌دانید فایل‌سیستم سرور و Kernel شما از Swap File ساخته‌شده با fallocate پشتیبانی می‌کند، می‌توانید از آن نیز استفاده کنید.

مرحله چهارم: تنظیم Permission امن برای Swap File

این مرحله بسیار مهم است.

Swap می‌تواند حاوی بخش‌هایی از داده‌های موجود در Memory باشد؛ بنابراین نباید کاربران عادی بتوانند فایل Swap را بخوانند.

Permission را روی 600 قرار دهید:

sudo chmod 600 /swapfile

بررسی:

ls -lh /swapfile

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

-rw------- 1 root root 2.0G ... /swapfile

یعنی فقط root امکان خواندن و نوشتن فایل را دارد.

مرحله پنجم: تبدیل فایل به Swap Area

حالا فایل را با mkswap آماده کنید:

sudo mkswap /swapfile

نمونه خروجی می‌تواند شبیه این باشد:

Setting up swapspace version 1, size = 2 GiB

در این مرحله فایل ساختار لازم برای استفاده به‌عنوان Swap را دارد، اما هنوز فعال نشده است.

مرحله ششم: فعال کردن Swap

برای فعال کردن:

sudo swapon /swapfile

حالا بررسی کنید:

sudo swapon --show

باید /swapfile را ببینید.

همچنین:

free -h

اکنون قسمت Swap می‌تواند شبیه این باشد:

Swap:          2.0Gi          0B       2.0Gi

یعنی Swap File با موفقیت فعال شده است.

مرحله هفتم: دائمی کردن Swap بعد از Restart

اگر فقط swapon را اجرا کنید، باید مطمئن شویم سیستم بعد از Boot نیز Swap را فعال می‌کند.

فایل:

/etc/fstab

تنظیمات فایل‌سیستم‌ها و Swapهایی را که هنگام Boot فعال می‌شوند نگهداری می‌کند.

قبل از ویرایش بهتر است Backup بگیرید:

sudo cp /etc/fstab /etc/fstab.backup

سپس فایل را باز کنید:

sudo nano /etc/fstab

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

/swapfile none swap sw 0 0

فایل را ذخیره کنید.

در Nano:

Ctrl + O
Enter
Ctrl + X

بررسی fstab قبل از Restart

اشتباه در /etc/fstab می‌تواند هنگام Boot دردسر ایجاد کند.

بنابراین خط اضافه‌شده را دوباره بررسی کنید:

grep swap /etc/fstab

باید خطی مشابه زیر مشاهده کنید:

/swapfile none swap sw 0 0

همچنین وضعیت فعلی:

sudo swapon --show

را بررسی کنید.

برای یک تست عملی، در زمانی که Restart سرور برای شما امن است می‌توانید VPS را Reboot کنید:

sudo reboot

بعد از اتصال مجدد:

sudo swapon --show

و:

free -h

را اجرا کنید.

اگر Swap همچنان فعال است، تنظیم دائمی به‌درستی انجام شده است.

یک نسخه خلاصه از تمام دستورات

برای ساخت Swap File دو گیگابایتی:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

بررسی:

sudo swapon --show
free -h

و برای دائمی شدن:

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

قبل از استفاده از دستور بالا، مطمئن شوید همین خط از قبل در /etc/fstab وجود ندارد؛ در غیر این صورت ممکن است ورودی تکراری بسازید.

Swappiness چیست؟

Linux پارامتری به نام:

vm.swappiness

دارد که روی تصمیم Kernel درباره استفاده از Swap در مقایسه با reclaim کردن حافظه فایل‌ها اثر می‌گذارد.

مقدار فعلی را ببینید:

cat /proc/sys/vm/swappiness

یا:

sysctl vm.swappiness

ممکن است خروجی چیزی شبیه این باشد:

vm.swappiness = 60

در Kernelهای امروزی swappiness در بازه‌ای گسترده‌تر از برداشت قدیمی «۰ تا ۱۰۰» تعریف می‌شود و مقدار مناسب به هزینه I/O و Workload بستگی دارد.

به همین دلیل نباید بدون دلیل یک عدد ثابت را برای تمام VPSها «بهترین مقدار» بدانیم.

آیا Swappiness را روی 10 بگذاریم؟

در بسیاری از آموزش‌های قدیمی توصیه می‌شود:

vm.swappiness=10

اما این مقدار برای همه سرورها الزاماً بهترین انتخاب نیست.

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

  • SSD یا NVMe متفاوت داشته باشند

  • Workload دیتابیس داشته باشند

  • Cache سنگین استفاده کنند

  • RAM کم یا زیاد داشته باشند

  • از zram یا zswap استفاده کنند

  • رفتار Memory متفاوتی داشته باشند

بنابراین بهتر است ابتدا مقدار پیش‌فرض و رفتار واقعی سرور را مشاهده کنید.

اگر دلیل مشخصی برای کاهش Swappiness دارید، می‌توانید ابتدا به‌صورت موقت تست کنید.

مثلاً:

sudo sysctl vm.swappiness=10

بررسی:

sysctl vm.swappiness

این تغییر پس از Reboot دائمی نیست.

دائمی کردن Swappiness

اگر بعد از تست تصمیم گرفتید مقدار خاصی را دائمی کنید، می‌توانید یک فایل تنظیمات اختصاصی بسازید:

sudo nano /etc/sysctl.d/99-swappiness.conf

مثلاً:

vm.swappiness=10

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

sudo sysctl --system

و بررسی کنید:

sysctl vm.swappiness

مقدار 10 در این بخش صرفاً مثال است، نه توصیه عمومی برای تمام سرورها.

چگونه بفهمیم سرور واقعاً از Swap استفاده می‌کند؟

ساده‌ترین روش:

free -h

است.

مثلاً:

Swap:          2.0Gi       320Mi       1.7Gi

یعنی حدود 320 MiB Swap در حال استفاده است.

برای اطلاعات Swapهای فعال:

swapon --show

برای مشاهده وضعیت Memory به‌صورت دوره‌ای می‌توانید از:

watch -n 2 free -h

استفاده کنید.

هر دو ثانیه خروجی به‌روزرسانی می‌شود.

برای خروج:

Ctrl + C

مشاهده Swap با vmstat

دستور:

vmstat 1

اطلاعات مفیدی درباره Memory، CPU و Swap نشان می‌دهد.

در خروجی vmstat دو ستون مهم:

si
so

وجود دارند.

si نشان‌دهنده داده‌ای است که از Swap به Memory وارد می‌شود و so داده‌ای است که از Memory به Swap منتقل می‌شود.

وجود مقدار Swap Used لزوماً به معنی مشکل نیست؛ اما Swap I/O سنگین و مداوم همراه با کندی سیستم می‌تواند نشانه فشار حافظه باشد.

برای خروج از vmstat:

Ctrl + C

آیا استفاده از Swap یعنی RAM سرور کم است؟

نه همیشه.

Linux ممکن است در شرایط مختلف بخشی از صفحات Memory را به Swap منتقل کند.

وجود مقداری Swap Used به‌تنهایی برای نتیجه‌گیری درباره کمبود RAM کافی نیست.

بهتر است این موارد را در کنار هم بررسی کنید:

MemAvailable
Swap Used
Swap I/O
Load
Disk I/O
مصرف Processها
کندی واقعی سرویس

اگر Swap مرتب در حال خواندن و نوشتن است و اپلیکیشن‌ها کند شده‌اند، احتمالاً باید فشار Memory را جدی‌تر بررسی کنید.

پیدا کردن پردازش‌های پرمصرف RAM

برای مشاهده Processها:

top

در بسیاری از سیستم‌ها می‌توانید بر اساس Memory مرتب‌سازی کنید.

روش ساده دیگر:

ps aux --sort=-%mem | head -n 15

این دستور Processهایی با بیشترین درصد مصرف Memory را نشان می‌دهد.

برای نمایش بر اساس RSS نیز می‌توانید از ابزارهای مناسب Process Monitoring استفاده کنید.

اگر Docker روی سرور دارید:

docker stats

می‌تواند مصرف RAM و CPU Containerها را نشان دهد.

Out of Memory یا OOM چیست؟

اگر سیستم برای تخصیص Memory با مشکل جدی روبه‌رو شود، Kernel ممکن است برای حفظ سیستم مجبور شود Processهایی را متوقف کند.

مکانیزمی که در این وضعیت وارد عمل می‌شود معمولاً با نام OOM Killer شناخته می‌شود.

اگر تصور می‌کنید Process شما به دلیل کمبود Memory Kill شده، Logهای Kernel را بررسی کنید:

sudo journalctl -k | grep -i -E 'out of memory|oom|killed process'

همچنین:

dmesg | grep -i -E 'out of memory|oom|killed process'

ممکن است اطلاعاتی درباره Process متوقف‌شده پیدا کنید.

دسترسی به بعضی خروجی‌های dmesg می‌تواند بسته به تنظیمات سیستم محدود باشد.

آیا Swap جلوی OOM را می‌گیرد؟

Swap می‌تواند فضای تنفس بیشتری برای سیستم ایجاد کند، اما تضمین نمی‌کند که OOM هرگز رخ ندهد.

اگر:

  • Memory Leak دارید

  • RAM به‌شدت کمتر از نیاز Workload است

  • چند سرویس سنگین هم‌زمان اجرا می‌شوند

  • Containerها Limit مناسب ندارند

  • Swap نیز پر شود

سیستم همچنان می‌تواند با کمبود Memory روبه‌رو شود.

به همین دلیل Swap را باید بخشی از طراحی Memory بدانیم، نه جایگزین ظرفیت کافی RAM.

آیا Swap باعث کند شدن VPS می‌شود؟

اگر سیستم مجبور شود حجم زیادی از داده‌ها را دائماً بین RAM و Storage جابه‌جا کند، عملکرد می‌تواند به‌شدت افت کند.

این وضعیت معمولاً به آن چیزی نزدیک می‌شود که کاربران به‌عنوان Swap Thrashing می‌شناسند.

RAM تأخیر بسیار پایین‌تری نسبت به SSD یا NVMe دارد.

بنابراین اگر اپلیکیشن فعال مرتب به داده‌هایی نیاز داشته باشد که به Swap منتقل شده‌اند، I/O Storage افزایش پیدا می‌کند و پاسخ‌دهی سیستم ممکن است کند شود.

در چنین وضعیتی راه‌حل واقعی معمولاً یکی از این موارد است:

  • افزایش RAM

  • کاهش Memory مصرفی اپلیکیشن

  • محدود کردن سرویس‌های غیرضروری

  • تنظیم Cache

  • رفع Memory Leak

  • تقسیم Workload بین چند سرور

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

NVMe سریع‌تر از بسیاری از انواع Storage است، اما همچنان RAM نیست.

وجود NVMe می‌تواند بعضی هزینه‌های Swap I/O را کاهش دهد، اما تصمیم به ساخت Swap همچنان باید بر اساس Workload و طراحی سرور گرفته شود.

Swap روی NVMe را نباید معادل RAM واقعی در نظر گرفت.

تغییر اندازه Swap File

فرض کنید یک Swap File دو گیگابایتی دارید و می‌خواهید آن را به 4 GiB تغییر دهید.

ابتدا بررسی کنید:

sudo swapon --show

قبل از غیرفعال کردن Swap مطمئن شوید سیستم RAM کافی برای وضعیت فعلی دارد.

سپس:

sudo swapoff /swapfile

فایل قبلی را حذف کنید:

sudo rm /swapfile

فایل جدید 4 GiB بسازید:

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

Permission:

sudo chmod 600 /swapfile

فرمت:

sudo mkswap /swapfile

فعال‌سازی:

sudo swapon /swapfile

بررسی:

sudo swapon --show
free -h

اگر مسیر Swap همان /swapfile باقی مانده باشد، ورودی موجود در /etc/fstab نیازی به تغییر اندازه ندارد.

چرا swapoff ممکن است خطا بدهد؟

اگر اجرا کنید:

sudo swapoff /swapfile

اما RAM آزاد کافی نباشد، سیستم ممکن است نتواند تمام داده‌های لازم را از Swap دوباره وارد Memory کند.

قبل از swapoff بررسی کنید:

free -h

و Processهای پرمصرف را شناسایی کنید.

روی Production بدون بررسی فشار Memory، Swap را ناگهانی غیرفعال نکنید.

حذف کامل Swap File

اگر دیگر Swap را نمی‌خواهید، ابتدا بررسی کنید:

sudo swapon --show

سپس Swap را غیرفعال کنید:

sudo swapoff /swapfile

بعد باید ورودی مربوط به آن را از /etc/fstab حذف کنید:

sudo nano /etc/fstab

این خط را حذف کنید:

/swapfile none swap sw 0 0

سپس فایل Swap را پاک کنید:

sudo rm /swapfile

بررسی:

sudo swapon --show
free -h

خطای swapon failed: Invalid argument

اگر هنگام اجرای:

sudo swapon /swapfile

با خطای:

swapon failed: Invalid argument

مواجه شدید، چند مورد را بررسی کنید.

ابتدا مطمئن شوید فایل با mkswap آماده شده است:

sudo mkswap /swapfile

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

findmnt -no FSTYPE /

برخی فایل‌سیستم‌ها، به‌خصوص سناریوهای Copy-on-Write، محدودیت‌های خاصی برای Swap File دارند.

برای مثال Btrfs نیازمند شرایط خاصی برای Swap File است و نمی‌توان هر فایل معمولی روی Btrfs را مستقیماً به Swap تبدیل کرد.

در چنین شرایطی باید راهنمای مخصوص فایل‌سیستم و نسخه Kernel سرور را دنبال کنید.

Swap File روی Btrfs

اگر Root Filesystem شما Btrfs است، دستورهای ساده این مقاله را بدون بررسی مستندات Btrfs اجرا نکنید.

برای تشخیص:

findmnt -no FSTYPE /

اگر خروجی:

btrfs

بود، Swap File نیازمند شرایط خاص است؛ از جمله الزامات مربوط به Copy-on-Write و ساخت فایل مناسب برای Swap.

در این وضعیت از روش عمومی مخصوص ext4 یا فایل‌سیستم‌های معمولی به‌صورت کورکورانه استفاده نکنید.

بررسی فایل‌سیستم VPS

برای مشاهده فایل‌سیستم Root:

findmnt /

یا:

df -T /

نمونه:

Filesystem     Type  1K-blocks     Used Available Use% Mounted on
/dev/vda1      ext4   ...

اگر ext4 مشاهده می‌کنید، سناریوی معمول Swap File ساده‌تر است.

Permission اشتباه Swap File

برای بررسی:

ls -l /swapfile

حالت پیشنهادی:

-rw------- 1 root root ...

اگر Permission بازتر است:

sudo chmod 600 /swapfile

را اجرا کنید.

Duplicate شدن Swap در fstab

اگر چند بار این دستور را اجرا کنید:

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

ممکن است خط تکراری ایجاد شود.

بررسی کنید:

grep -n swapfile /etc/fstab

اگر چند خط کاملاً یکسان دارید، فایل را باز کنید:

sudo nano /etc/fstab

و فقط ورودی صحیح موردنیاز را نگه دارید.

Swap Priority چیست؟

اگر چند Swap Area فعال باشد، Linux می‌تواند برای آن‌ها Priority داشته باشد.

برای مشاهده:

swapon --show

ستون:

PRIO

Priority را نشان می‌دهد.

در یک VPS ساده با فقط یک /swapfile معمولاً نیازی نیست Priority را دستی تغییر دهید.

اما در سرورهایی با چند Swap Device یا Storageهای متفاوت، Priority می‌تواند مهم شود.

آیا می‌توان چند Swap File داشت؟

بله.

Linux می‌تواند چند Swap Area فعال داشته باشد.

مثلاً:

/swapfile1
/swapfile2

اما روی یک VPS معمولی معمولاً مدیریت یک Swap File کافی و ساده‌تر است.

قبل از اضافه کردن Swap جدید ابتدا:

swapon --show

را بررسی کنید تا تنظیمات موجود را بشناسید.

مانیتور کردن Swap در سرور Production

صرف ساخت Swap کافی نیست.

بهتر است موارد زیر را مانیتور کنید:

  • RAM Available

  • Swap Used

  • Swap In

  • Swap Out

  • Disk I/O

  • CPU

  • Load Average

  • OOM Events

ابزارهای ساده خط فرمان:

free -h
vmstat 1
top

و برای بررسی Storage:

iostat

اگر iostat نصب نیست، معمولاً در Package مربوط به sysstat قرار دارد.

برای Monitoring دائمی بهتر است از سیستم مانیتورینگ مناسب محیط Production استفاده کنید.

Swap و Docker

اگر Docker روی VPS دارید، Swap سیستم میزبان همچنان بخشی از طراحی Memory سرور است.

اما Containerها می‌توانند Memory Limit و تنظیمات خاص خودشان را داشته باشند.

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

docker stats

اگر یک Container دائماً RAM زیادی مصرف می‌کند، صرفاً اضافه کردن Swap ممکن است مشکل اصلی را پنهان کند.

ابتدا باید علت مصرف Memory اپلیکیشن را بررسی کنید.

Swap و Database

Databaseهایی مثل PostgreSQL، MySQL و Redis رفتار Memory خاص خودشان را دارند.

Swap سنگین برای Database معمولاً می‌تواند روی Latency اثر منفی داشته باشد.

اگر Database شما دائماً به Swap می‌رود، بهتر است:

  • Buffer و Cacheها بررسی شوند

  • تعداد Connectionها بررسی شود

  • Queryها و Workload تحلیل شوند

  • RAM واقعی افزایش پیدا کند

به جای اینکه فقط حجم Swap را بیشتر کنید.

Swap و SSD Wear

Swap نوشتن روی Storage ایجاد می‌کند.

در شرایط عادی و استفاده کم، موضوع با استفاده سنگین و مداوم متفاوت است.

اگر سرور دائماً در حال Swap In/Out باشد، علاوه بر کاهش Performance، I/O بیشتری روی Storage ایجاد می‌شود.

این وضعیت دلیل دیگری است که Swap نباید جایگزین RAM کافی شود.

چک‌لیست ساخت Swap در Ubuntu

قبل و بعد از راه‌اندازی این موارد را بررسی کنید:

  • مقدار RAM فعلی بررسی شده است.

  • Swap موجود بررسی شده است.

  • فضای Disk کافی وجود دارد.

  • نوع فایل‌سیستم شناخته شده است.

  • Swap File با اندازه مناسب ساخته شده است.

  • Permission روی 600 قرار گرفته است.

  • mkswap با موفقیت اجرا شده است.

  • Swap با swapon فعال شده است.

  • وضعیت با swapon --show بررسی شده است.

  • ورودی صحیح به /etc/fstab اضافه شده است.

  • ورودی تکراری در fstab وجود ندارد.

  • Swappiness بدون دلیل تغییر داده نشده است.

  • مصرف Swap بعد از راه‌اندازی مانیتور می‌شود.

دستورات مهم Swap در یک نگاه

مشاهده Memory:

free -h

مشاهده Swapهای فعال:

swapon --show

مشاهده از /proc:

cat /proc/swaps

ساخت فایل 2 GiB:

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

Permission:

sudo chmod 600 /swapfile

آماده‌سازی:

sudo mkswap /swapfile

فعال‌سازی:

sudo swapon /swapfile

غیرفعال‌سازی:

sudo swapoff /swapfile

مشاهده Swappiness:

sysctl vm.swappiness

بررسی نوع فایل‌سیستم:

findmnt -no FSTYPE /

بررسی OOM:

sudo journalctl -k | grep -i -E 'out of memory|oom|killed process'

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

Swap چیست؟

Swap فضایی روی Storage است که Linux می‌تواند برای مدیریت بخشی از صفحات حافظه از آن استفاده کند. Swap بسیار کندتر از RAM است و جای RAM واقعی را نمی‌گیرد.

آیا ساخت Swap روی VPS مفید است؟

در بسیاری از VPSها، به‌خصوص سرورهای کوچک، Swap می‌تواند هنگام فشار موقت حافظه مفید باشد. اما اگر سرور دائماً به Swap وابسته است، باید مصرف RAM و ظرفیت VPS بررسی شود.

چقدر Swap بسازیم؟

عدد واحدی برای تمام سرورها وجود ندارد. اندازه مناسب به RAM، Workload، Storage و نیازهای سیستم بستگی دارد. برای VPSهای کوچک، 1 تا 2 GiB می‌تواند یک نقطه شروع متداول باشد، اما باید بر اساس شرایط واقعی سرور تصمیم گرفت.

آیا Swap سرعت RAM را دارد؟

خیر. حتی Storageهای سریع NVMe نیز برای این کاربرد جای RAM واقعی را نمی‌گیرند.

آیا Swap جلوی Out of Memory را می‌گیرد؟

Swap می‌تواند احتمال یا زمان رسیدن به فشار شدید حافظه را کاهش دهد، اما تضمین نمی‌کند OOM رخ ندهد. اگر Workload بیش از ظرفیت RAM و Swap باشد، سیستم همچنان می‌تواند با OOM مواجه شود.

آیا مقدار Swappiness را روی 10 قرار دهیم؟

نه به‌صورت عمومی. 10 یک مقدار رایج در بعضی آموزش‌هاست، اما مقدار مناسب به Workload و Storage بستگی دارد. ابتدا رفتار واقعی سرور را بررسی کنید و فقط با دلیل مشخص آن را تغییر دهید.

چگونه بفهمیم Swap فعال است؟

اجرا کنید:

sudo swapon --show

یا:

free -h

چگونه Swap را بعد از Restart نگه داریم؟

ورودی Swap باید در /etc/fstab وجود داشته باشد:

/swapfile none swap sw 0 0

آیا می‌توان Swap را حذف کرد؟

بله. ابتدا با swapoff آن را غیرفعال کنید، ورودی آن را از /etc/fstab حذف کنید و سپس فایل را پاک کنید. قبل از swapoff مطمئن شوید RAM کافی وجود دارد.

جمع‌بندی

Swap یکی از ابزارهای مهم مدیریت Memory در Linux است، به‌خصوص روی VPSهایی که RAM محدودی دارند.

برای ساخت یک Swap File دو گیگابایتی، مسیر اصلی کار این است:

بررسی RAM و Swap
↓
بررسی فضای Disk
↓
ساخت /swapfile
↓
chmod 600
↓
mkswap
↓
swapon
↓
ثبت در /etc/fstab
↓
مانیتور کردن مصرف

دستورات اصلی:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

سپس وضعیت را بررسی کنید:

sudo swapon --show
free -h

و برای فعال شدن بعد از Reboot:

/swapfile none swap sw 0 0

را به /etc/fstab اضافه کنید.

مهم‌ترین نکته این است که Swap را درمان کمبود دائمی RAM ندانید.

اگر سیستم مرتب Swap سنگین دارد، Disk I/O بالا است یا Processها با OOM متوقف می‌شوند، باید علت اصلی مصرف Memory را بررسی کنید و در صورت نیاز منابع VPS را افزایش دهید.

مطالب مرتبط

ارشیا درستکار

نویسنده مقالات تخصصی و آموزشی در وبلاگ نتزو.

مشاهده تمام مقالات این نویسنده

مقالات مرتبط و پیشنهادی