اگر VPS شما RAM کمی دارد و هنگام اجرای Docker، دیتابیس، Node.js، Python یا سرویسهای دیگر با کندی شدید، پیام Killed یا OOM Killer روبهرو میشوید، ساخت Swap میتواند برای کنترل جهشهای موقت مصرف حافظه مفید باشد. Swap بخشی از دیسک است که Linux میتواند هنگام فشار حافظه برای نگهداری بعضی Pageهای حافظه از آن استفاده کند.
مسیر سریع: ابتدا با free -h و swapon –show بررسی کنید Swap فعالی دارید یا نه. اگر ندارید، فضای دیسک را کنترل کنید، یک Swap File بسازید، Permission آن را روی 600 قرار دهید، با mkswap آماده و با swapon فعال کنید. در پایان آن را در /etc/fstab ثبت کنید تا بعد از Reboot نیز فعال بماند.
Swap چیست و چه مشکلی را حل میکند؟
RAM بسیار سریعتر از دیسک است. وقتی حافظه فیزیکی تحت فشار قرار میگیرد، Linux میتواند بعضی دادههای کماستفاده را از RAM به فضای Swap منتقل کند تا RAM برای Processهای فعالتر آزاد شود.
Swap میتواند در VPS کمرم به کاهش احتمال OOM در جهشهای کوتاه مصرف حافظه کمک کند، اما جایگزین RAM کافی نیست. اگر برنامه دائماً بیش از ظرفیت VPS حافظه مصرف میکند، Swap ممکن است فقط OOM را دیرتر کند و در عوض سرعت سیستم را بهدلیل I/O دیسک کاهش دهد.
قبل از ساخت Swap چه چیزهایی را بررسی کنیم؟
قبل از ایجاد فایل جدید، ابتدا وضعیت فعلی RAM، Swap و فضای دیسک را بررسی کنید.
محل اجرا: تمام فرمانهای این مقاله روی خود VPS لینوکسی و از طریق SSH اجرا میشوند.
free -h
swapon --show
df -h /
اگر swapon –show خروجی ندارد، احتمالاً Swap فعالی روی سیستم نیست. اگر Swap از قبل وجود دارد، بدون بررسی دلیل، Swap دوم ایجاد نکنید.
برای VPS چه مقدار Swap بسازیم؟
یک عدد ثابت برای همه سرورها وجود ندارد. اندازه مناسب به RAM، فضای دیسک و نوع برنامه بستگی دارد.
| RAM VPS | Swap پیشنهادی اولیه | سناریو |
|---|---|---|
| 512MB | 1 تا 2GB | VPS بسیار کمرم؛ برای جهشهای کوتاه |
| 1GB | 1 تا 2GB | وبسرور سبک، Bot، سرویس کوچک |
| 2GB | 1 تا 2GB | Docker سبک و چند سرویس محدود |
| 4GB | 1 تا 2GB یا بر اساس workload | برای ضربهگیر، نه جایگزین RAM |
این مقادیر پیشنهاد عملی برای شروع هستند، نه عدد رسمی Kernel. اگر سیستم شما بهصورت مداوم چند گیگابایت Swap مصرف میکند، احتمالاً باید مصرف برنامه یا ظرفیت RAM را دوباره بررسی کنید.
مرحله ۱: بررسی نوع فایلسیستم
قبل از ساخت Swap File مشخص کنید Root Filesystem چیست:
findmnt -no FSTYPE /
اگر خروجی ext4 یا xfs است، مسیر این مقاله معمولاً مناسب است.
⚠️ اگر فایلسیستم btrfs است، Swap File محدودیتهای ویژه Copy-on-Write دارد. دستورهای معمول را کورکورانه اجرا نکنید. نسخههای جدید Btrfs ابزار مخصوص ساخت Swap File نیز دارند.
مرحله ۲: یک Swap File دو گیگابایتی بسازید
در این آموزش یک فایل 2GB در مسیر /swapfile میسازیم.
برای سازگاری بیشتر از dd استفاده میکنیم:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
این دستور یک فایل تقریباً 2GiB ایجاد میکند. اگر Swap یک گیگابایتی میخواهید، مقدار count=1024 قرار دهید.
وجود فایل را بررسی کنید:
ls -lh /swapfile
چرا بهجای fallocate از dd استفاده کردیم؟
دستور fallocate در بسیاری از سیستمها سریعتر است، اما مستندات swapon هشدار میدهند فایل Swap نباید دارای hole باشد و رفتار فایلهای Preallocated به فایلسیستم بستگی دارد. روش dd با نوشتن واقعی داده صفر، انتخاب قابلحملتری برای یک راهنمای عمومی است.
مرحله ۳: Permission فایل Swap را محدود کنید
فایل Swap میتواند حاوی بخشهایی از حافظه Processها باشد؛ بنابراین نباید برای کاربران دیگر قابل خواندن باشد.
sudo chmod 600 /swapfile
نتیجه را بررسی کنید:
ls -l /swapfile
Permission مورد انتظار:
-rw-------
مرحله ۴: فایل را به Swap Area تبدیل کنید
sudo mkswap /swapfile
فرمان mkswap فایل را با Metadata لازم برای استفاده بهعنوان Swap آماده میکند. هنوز در این مرحله Swap فعال نشده است.
مرحله ۵: Swap را فعال کنید
sudo swapon /swapfile
حالا وضعیت را بررسی کنید:
swapon --show
free -h
اگر /swapfile در خروجی swapon –show دیده شود و مقدار Swap در free -h افزایش یافته باشد، فعالسازی موفق بوده است.
VPS کمرم دارید یا دائماً وارد Swap میشود؟
Swap برای عبور از فشار کوتاه حافظه مفید است، اما اگر سرویس دائماً RAM بیشتری میخواهد، بهتر است ظرفیت واقعی workload را بررسی کنید. برای Docker، دیتابیس و سرویسهای دائمی، انتخاب VPS با RAM کافی معمولاً از اتکای دائمی به Swap پایدارتر است.
تماس با پشتیبانی ایرانیکاسرور: 021-91302467
مرحله ۶: Swap را بعد از Reboot دائمی کنید
Swap فعلی تا اینجا فعال است، اما برای اینکه بعد از Reboot نیز بهصورت خودکار فعال شود باید آن را در /etc/fstab ثبت کنید.
⚠️ قبل از ویرایش /etc/fstab یک نسخه پشتیبان بگیرید. خطای Syntax در این فایل میتواند Boot یا Mountهای سیستم را دچار مشکل کند.
sudo cp /etc/fstab /etc/fstab.backup
فایل را باز کنید:
sudo nano /etc/fstab
این خط را فقط یکبار به انتهای فایل اضافه کنید:
/swapfile none swap sw 0 0
در Nano با Ctrl+O فایل را ذخیره کنید، Enter بزنید و با Ctrl+X خارج شوید.
مرحله ۷: تنظیم fstab را قبل از Reboot آزمایش کنید
برای اینکه مطمئن شوید Entry جدید قابل استفاده است، Swap را موقتاً خاموش کنید:
sudo swapoff /swapfile
سپس Swapهای تعریفشده در /etc/fstab را فعال کنید:
sudo swapon -a
حالا:
swapon --show
اگر /swapfile دوباره ظاهر شد، Entry ثبتشده قابل استفاده است.
مرحله ۸: مقدار swappiness را بررسی کنید
پارامتر vm.swappiness مشخص میکند Kernel در تصمیمگیری بین Swap-backed Memory و File Cache چه نسبتی از هزینه را در نظر بگیرد.
مقدار فعلی:
sysctl vm.swappiness
مستندات Kernel بازه 0 تا 200 را تعریف میکنند و مقدار پیشفرض Kernel برابر 60 است. مقدار کمتر یعنی Kernel Swap I/O را نسبتاً گرانتر در نظر میگیرد؛ اما swappiness «درصد RAM که باید پر شود» نیست.
برای VPS معمولی با Swap روی SSD میتوانید ابتدا بدون تغییر، رفتار سیستم را مشاهده کنید. اگر دلیل مشخصی برای تغییر دارید، مثلاً میخواهید Swap کمتر تهاجمی باشد، یک مقدار نمونه مانند 20 قابل آزمایش است:
sudo sysctl vm.swappiness=20
این تغییر تا Reboot بعدی موقت است.
برای دائمیکردن:
echo 'vm.swappiness=20' | sudo tee /etc/sysctl.d/99-vps-swap.conf
سپس:
sudo sysctl --system
و دوباره مقدار را بررسی کنید:
sysctl vm.swappiness
⚠️ مقدار ۲۰ عدد جادویی یا بهترین مقدار برای همه VPSها نیست. مستندات Kernel تأکید میکنند مقدار به workload و هزینه I/O بستگی دارد. ابتدا رفتار سیستم را اندازهگیری کنید و فقط در صورت نیاز آن را تغییر دهید.
مرحله ۹: بعد از Reboot بررسی کنید Swap فعال مانده باشد
اگر Reboot برای سرور شما امن است و سرویسهای Production آمادگی Restart دارند:
sudo reboot
بعد از بالا آمدن سرور:
swapon --show
free -h
sysctl vm.swappiness
اگر Swap File و مقدار تنظیمشده نمایش داده شوند، تنظیمات دائمی هستند.
اگر خطای swapfile has holes دریافت کردیم چه کنیم؟
این خطا یعنی فایل ایجادشده برای استفاده مستقیم بهعنوان Swap مناسب نیست. فایلهای Sparse یا بعضی فایلهای Preallocated ممکن است توسط swapon رد شوند.
اگر فایل هنوز فعال نشده است، آن را حذف و با روش dd دوباره ایجاد کنید:
sudo rm /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
اگر فایل Swap فعال است، قبل از حذف آن ابتدا swapoff اجرا کنید.
چطور Swap را حذف کنیم؟
اگر بعداً RAM سرور را افزایش دادید یا دیگر به Swap File نیاز ندارید، ابتدا آن را غیرفعال کنید:
sudo swapoff /swapfile
خط مربوط به /swapfile را از /etc/fstab حذف کنید. بعد از اطمینان از غیرفعالشدن:
sudo rm /swapfile
اگر فایل تنظیم swappiness را فقط برای همین تغییر ساختهاید و میخواهید به تنظیم قبلی برگردید:
sudo rm /etc/sysctl.d/99-vps-swap.conf
sudo sysctl --system
چه زمانی Swap نشانه کمبود واقعی RAM است؟
وجود Swap Used بهتنهایی مشکل نیست. مهمتر این است که سیستم چه رفتاری دارد.
🔹 اگر Swap مقدار کمی استفاده میشود و سرور روان است، معمولاً نیاز به اقدام فوری نیست.
🔹 اگر Swap دائماً در حال افزایش است، مصرف RAM برنامهها را بررسی کنید.
🔹 اگر سرور همراه با Swap زیاد بسیار کند شده، احتمال فشار Memory و I/O وجود دارد.
🔹 اگر همچنان OOM Killer فعال میشود، Swap بهتنهایی ظرفیت کافی ایجاد نکرده است.
🔹 اگر یک Process مرتب رشد میکند، Memory Leak را بررسی کنید.
پرسشهای متداول
آیا Swap باعث افزایش RAM VPS میشود؟
خیر. Swap فضای دیسک است و سرعت آن با RAM قابل مقایسه نیست. Swap فقط به Kernel فضای بیشتری برای مدیریت فشار حافظه میدهد.
برای VPS یک گیگابایت RAM چقدر Swap مناسب است؟
برای یک VPS عمومی کمرم، ۱ تا ۲ گیگابایت میتواند نقطه شروع عملی باشد، اما مقدار مناسب به workload و فضای دیسک بستگی دارد. این عدد قانون رسمی Linux نیست.
آیا Swap جلوی OOM Killer را میگیرد؟
میتواند احتمال OOM را در جهشهای کوتاه مصرف حافظه کاهش دهد، اما تضمین نمیکند. اگر RAM و Swap هر دو تحت فشار باشند، OOM همچنان ممکن است رخ دهد.
آیا مقدار swappiness را روی صفر بگذاریم؟
برای همه سرورها توصیه عمومی نیست. حتی مقدار صفر به معنی «هرگز از Swap استفاده نکن» نیست. انتخاب مقدار به workload و رفتار I/O سیستم بستگی دارد.
آیا Swap روی SSD به دیسک آسیب میزند؟
هر نوشتن روی SSD بخشی از چرخه نوشتن دیسک است، اما وجود Swap بهتنهایی به معنی مصرف شدید نیست. اگر سیستم دائماً Swap I/O سنگین دارد، مسئله اصلی معمولاً کمبود RAM یا workload نامتناسب است.
آیا میتوان چند Swap File داشت؟
بله، Linux امکان استفاده از چند Swap Area را دارد، اما برای یک VPS معمولی معمولاً یک Swap File با اندازه مناسب مدیریت سادهتری دارد.
چرا Swap بعد از Reboot ناپدید میشود؟
اگر فقط swapon /swapfile اجرا کرده باشید، فعالسازی موقت است. برای فعالشدن در Boot باید Entry صحیح در /etc/fstab وجود داشته باشد.
منابع رسمی
🔹 Ubuntu Manpages؛ swapon و محدودیت Swap File
🔹 Linux Kernel Documentation؛ vm.swappiness
جمعبندی
برای VPS کمرم، Swap میتواند یک لایه اطمینان در برابر جهش کوتاه مصرف حافظه ایجاد کند. ابتدا وضعیت RAM، Swap و فضای دیسک را بررسی کنید؛ فایل Swap را با Permission محدود بسازید، با mkswap و swapon فعال کنید و سپس آن را در /etc/fstab ثبت کنید. بعد از آن مصرف واقعی Swap را زیر نظر بگیرید. اگر سرور دائماً وابسته به Swap است یا همچنان OOM رخ میدهد، مشکل اصلی احتمالاً کمبود RAM یا مصرف غیرعادی برنامه است.
هنوز VPS با کمبود حافظه روبهرو است؟
اگر بعد از ساخت Swap همچنان OOM Killer، پیام Killed یا کندی شدید دارید، میتوانید برای بررسی مصرف RAM، Swap، سرویسهای پرمصرف و تنظیمات سیستم درخواست فنی ثبت کنید.
تماس با پشتیبانی ایرانیکاسرور: 021-91302467






دیدگاهها (۰)