اگر یک 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 را افزایش دهید.



