اگر روی سرور لینوکسی با خطاهایی مثل کند شدن شدید سرویسها، متوقف شدن MySQL یا PHP-FPM، از کار افتادن Docker، خطای Out of Memory یا بسته شدن ناگهانی پردازشها روبهرو شدهاید، احتمالاً سرور شما در مقاطعی با کمبود RAM مواجه شده است. در چنین شرایطی، اضافه کردن Swap در اوبونتو میتواند به سیستم کمک کند بهجای متوقف کردن پردازشها، بخشی از دادههای کمتر فعال را موقتاً روی دیسک نگه دارد.
Swap جایگزین RAM واقعی نیست؛ چون سرعت دیسک، حتی SSD، از حافظه RAM کمتر است. بااینحال، در سرورهای کوچک، VPSهای اقتصادی، سرورهای وردپرس، دیتابیسهای سبک، سرویسهای Docker، اسکریپتهای زمانبندیشده و محیطهایی که گاهی مصرف حافظه جهشی دارند، Swap میتواند مثل یک لایه ایمنی عمل کند و جلوی Crash ناگهانی سرویسها را بگیرد.
در این مقاله، بهصورت کامل و مرحلهبهمرحله یاد میگیرید Swap چیست، چه زمانی به آن نیاز دارید، چطور در Ubuntu وضعیت Swap را بررسی کنید، چطور یک Swap File امن بسازید، آن را با mkswap و swapon فعال کنید، چطور آن را در /etc/fstab دائمی کنید، مقدار swappiness را تنظیم کنید و خطاهای رایج Swap را عیبیابی کنید.
سطح مقاله: مقدماتی تا متوسط | مناسب برای: مدیران سرور، کاربران VPS، مدیران سایت وردپرسی، توسعهدهندگان، DevOpsها و افرادی که میخواهند مدیریت حافظه در لینوکس را بهتر درک کنند.
فهرست مطالب
- Swap چیست؟
- چرا روی سرور اوبونتو به Swap نیاز داریم؟
- تفاوت Swap و RAM چیست؟
- تفاوت Swap File و Swap Partition
- چه مقدار Swap برای سرور مناسب است؟
- بررسی وضعیت فعلی Swap در Ubuntu
- بررسی فضای خالی دیسک قبل از ساخت Swap
- ساخت Swap File در اوبونتو
- تنظیم سطح دسترسی امن برای Swap File
- فعالسازی Swap با mkswap و swapon
- دائمی کردن Swap در /etc/fstab
- تنظیم vm.swappiness
- تنظیم vm.vfs_cache_pressure
- تست و مانیتورینگ Swap
- افزایش یا کاهش حجم Swap File
- غیرفعال و حذف کردن Swap
- رفع خطاهای رایج هنگام ساخت Swap
- نکات امنیتی و عملکردی Swap
- Swap برای VPS و وردپرس
- چکلیست سریع ساخت Swap
- سوالات متداول
- جمعبندی
Swap چیست؟
Swap بخشی از فضای ذخیرهسازی دیسک است که سیستمعامل لینوکس میتواند هنگام کمبود RAM از آن بهعنوان حافظه کمکی استفاده کند. وقتی حافظه فیزیکی پر میشود، کرنل لینوکس میتواند بخشی از دادههای کمتر فعال را از RAM به Swap منتقل کند تا فضای RAM برای پردازشهای فعالتر آزاد شود.
به زبان ساده، RAM حافظه سریع و اصلی سیستم است، اما Swap یک فضای کندتر روی دیسک است که در شرایط فشار حافظه به کمک سیستم میآید.
Swap معمولاً برای این موارد استفاده میشود:
- جلوگیری از بسته شدن ناگهانی پردازشها هنگام کمبود RAM
- کمک به سرورهای کوچک با حافظه محدود
- مدیریت بهتر بارهای موقتی و جهشی
- کاهش احتمال فعال شدن OOM Killer
- حفظ پایداری نسبی سرویسها در شرایط فشار حافظه
OOM Killer بخشی از کرنل لینوکس است که وقتی RAM سیستم بهشدت کم میشود، برای آزاد کردن حافظه بعضی پردازشها را متوقف میکند. اگر این پردازش MySQL، PHP-FPM، Redis، Docker یا وبسرور باشد، سایت یا سرویس شما ممکن است ناگهان از دسترس خارج شود.
چرا روی سرور اوبونتو به Swap نیاز داریم؟
در بسیاری از سرورهای ابری و VPSها، مخصوصاً پلنهای کوچک، ممکن است Swap بهصورت پیشفرض فعال نباشد. تا زمانی که مصرف RAM پایین است، این موضوع مشکلی ایجاد نمیکند. اما وقتی سرور تحت فشار قرار میگیرد، نبود Swap میتواند باعث توقف ناگهانی سرویسها شود.
چند سناریوی رایج که Swap در آنها مفید است:
- سایت وردپرسی هنگام بکاپگیری یا آپدیت افزونه مصرف RAM بالایی پیدا میکند.
- MySQL یا MariaDB در زمان اجرای Queryهای سنگین حافظه بیشتری نیاز دارد.
- PHP-FPM Workerها در زمان افزایش ترافیک زیاد میشوند.
- Docker یا Buildهای موقتی حافظه زیادی مصرف میکنند.
- اسکریپتهای Cron در زمان مشخصی فشار ناگهانی ایجاد میکنند.
- سرور فقط ۱ یا ۲ گیگابایت RAM دارد.
در چنین شرایطی، Swap میتواند کمک کند سیستم بهجای Crash ناگهانی، با کندی کنترلشده ادامه دهد. البته اگر سرور دائماً از Swap استفاده میکند، راهحل اصلی افزایش RAM، بهینهسازی سرویسها یا ارتقای پلن است.
اگر سایت یا سرویس شما روی سرور مجازی ایران یا سرور مجازی آلمان اجرا میشود، فعال بودن Swap میتواند برای پلنهای کوچک و متوسط یک لایه محافظتی مهم باشد.
تفاوت Swap و RAM چیست؟
RAM حافظه فیزیکی سریع سیستم است. پردازنده به RAM با سرعت بسیار بالا دسترسی دارد. اما Swap روی دیسک ذخیره میشود؛ بنابراین سرعت آن بهمراتب کمتر است.
| ویژگی | RAM | Swap |
|---|---|---|
| محل ذخیره | حافظه فیزیکی | دیسک، SSD یا NVMe |
| سرعت | بسیار سریع | کندتر از RAM |
| کاربرد | اجرای اصلی برنامهها | حافظه کمکی هنگام فشار |
| مناسب برای استفاده دائمی | بله | خیر |
| اثر روی عملکرد | افزایش سرعت | در مصرف زیاد باعث کندی میشود |
بنابراین Swap راهحل افزایش کارایی نیست؛ بلکه بیشتر یک ابزار پایداری است. اگر سرور شما مرتباً Swap مصرف میکند، به این معنی است که باید مصرف حافظه برنامهها را بررسی کنید یا RAM سرور را افزایش دهید.
تفاوت Swap File و Swap Partition
در لینوکس میتوان Swap را به دو شکل ایجاد کرد:
- Swap Partition: یک پارتیشن اختصاصی روی دیسک
- Swap File: یک فایل معمولی که بهعنوان Swap استفاده میشود
در سرورهای جدید و VPSها، استفاده از Swap File معمولاً سادهتر و انعطافپذیرتر است؛ چون نیازی به تغییر پارتیشنبندی دیسک ندارد و میتوان آن را راحتتر ایجاد، تغییر اندازه یا حذف کرد.
| ویژگی | Swap File | Swap Partition |
|---|---|---|
| ایجاد | ساده و سریع | نیازمند پارتیشنبندی |
| تغییر اندازه | آسانتر | پیچیدهتر |
| مناسب برای VPS | بله | کمتر رایج |
| نیاز به Repartition | خیر | معمولاً بله |
در این مقاله از روش Swap File استفاده میکنیم؛ چون برای Ubuntu روی سرورهای ابری و VPS انتخاب عملیتری است.
چه مقدار Swap برای سرور مناسب است؟
هیچ عدد واحدی برای همه سرورها وجود ندارد. مقدار مناسب Swap به RAM، نوع سرویس، حجم ترافیک، نوع دیسک و اهمیت پایداری بستگی دارد.
برای سرورهای عمومی و VPS، این جدول میتواند نقطه شروع مناسبی باشد:
| RAM سرور | Swap پیشنهادی | توضیح |
|---|---|---|
| 512MB تا 1GB | 1GB تا 2GB | برای جلوگیری از Crash در سرورهای کوچک |
| 2GB | 2GB | مناسب برای سایتهای سبک و سرویسهای کوچک |
| 4GB | 2GB تا 4GB | بسته به مصرف MySQL، PHP-FPM یا Docker |
| 8GB | 2GB تا 4GB | بیشتر بهعنوان لایه ایمنی |
| 16GB و بیشتر | 2GB تا 8GB | بسته به workload و مانیتورینگ واقعی |
برای سرورهای دیتابیس پرترافیک، Redis، Elasticsearch یا سرویسهایی که به latency حساس هستند، باید با احتیاط بیشتری Swap را تنظیم کنید. استفاده شدید از Swap روی چنین سرویسهایی میتواند عملکرد را بهشدت کاهش دهد.
بررسی وضعیت فعلی Swap در Ubuntu
قبل از ساخت Swap جدید، ابتدا بررسی کنید آیا سیستم از قبل Swap فعال دارد یا نه.
sudo swapon --showاگر خروجی خالی بود، یعنی Swap فعالی وجود ندارد.
سپس وضعیت حافظه را بررسی کنید:
free -hنمونه خروجی بدون Swap:
total used free shared buff/cache available
Mem: 1.9Gi 700Mi 350Mi 20Mi 850Mi 1.0Gi
Swap: 0B 0B 0Bاگر خط Swap مقدار 0B نشان دهد، یعنی Swap فعال نیست.
برای بررسی اینکه آیا سیستم قبلاً بهدلیل کمبود حافظه پردازشی را متوقف کرده است، میتوانید لاگ کرنل را جستجو کنید:
sudo dmesg | grep -i "killed process"یا:
sudo journalctl -k | grep -i "killed process"اگر خروجی شامل عباراتی مثل Out of memory یا Killed process باشد، احتمالاً سرور در گذشته با کمبود RAM مواجه شده است.
بررسی فضای خالی دیسک قبل از ساخت Swap
چون Swap File روی دیسک ساخته میشود، باید مطمئن شوید فضای کافی دارید.
df -hنمونه خروجی:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 12G 36G 25% /در این مثال، روی پارتیشن اصلی ۳۶ گیگابایت فضای آزاد وجود دارد و ساخت یک Swap File دو گیگابایتی مشکلی ایجاد نمیکند.
نکته مهم: اگر دیسک سرور تقریباً پر است، قبل از ساخت Swap باید دلیل مصرف دیسک را بررسی کنید. ساخت Swap روی دیسک پر میتواند مشکل را بدتر کند.
برای پیدا کردن مسیرهای حجیم میتوانید از دستور زیر استفاده کنید:
sudo du -xh / --max-depth=1 2>/dev/null | sort -hrبرای آموزش بیشتر درباره دستورات لینوکس و پیدا کردن فایلهای حجیم، مقاله دستورات کاربردی لینوکس و مقاله جستجوی فایل در لینوکس با find و locate مفید هستند.
ساخت Swap File در اوبونتو
در این مثال یک Swap File دو گیگابایتی در مسیر /swapfile میسازیم. اگر به حجم دیگری نیاز دارید، عدد 2G را تغییر دهید.
روش اول: ساخت Swap File با fallocate
در فایلسیستمهای رایج مثل ext4، معمولاً میتوانید از fallocate استفاده کنید:
sudo fallocate -l 2G /swapfileحجم فایل را بررسی کنید:
ls -lh /swapfileخروجی باید مشابه این باشد:
-rw-r--r-- 1 root root 2.0G /swapfileروش دوم: ساخت Swap File با dd
اگر هنگام فعالسازی Swap با خطا مواجه شدید، یا فایلسیستم شما با fallocate مشکل دارد، روش dd قابلاتکاتر است:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progressاین دستور یک فایل دو گیگابایتی میسازد؛ چون ۲۰۴۸ بلوک یک مگابایتی نوشته میشود.
برای ساخت چهار گیگابایت:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progressروش dd کندتر از fallocate است، اما در بعضی فایلسیستمها و سناریوها مطمئنتر عمل میکند.
تنظیم سطح دسترسی امن برای Swap File
فایل Swap میتواند شامل بخشهایی از حافظه برنامهها باشد؛ بنابراین نباید برای کاربران عادی قابل خواندن باشد. سطح دسترسی آن را روی 600 قرار دهید:
sudo chmod 600 /swapfileسطح دسترسی را بررسی کنید:
ls -lh /swapfileخروجی امن باید شبیه این باشد:
-rw------- 1 root root 2.0G /swapfileاگر Permission فایل Swap بیش از حد باز باشد، هنگام اجرای swapon ممکن است هشدار امنیتی دریافت کنید یا فعالسازی با مشکل مواجه شود.
فعالسازی Swap با mkswap و swapon
حالا فایل ساختهشده را به فرمت Swap تبدیل کنید:
sudo mkswap /swapfileسپس آن را فعال کنید:
sudo swapon /swapfileبرای بررسی فعال شدن Swap:
sudo swapon --showنمونه خروجی:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2همچنین با free -h دوباره وضعیت حافظه را ببینید:
free -hنمونه خروجی بعد از فعالسازی:
total used free shared buff/cache available
Mem: 1.9Gi 700Mi 350Mi 20Mi 850Mi 1.0Gi
Swap: 2.0Gi 0B 2.0Giتا اینجا Swap فعال شده است، اما بعد از Reboot از بین میرود؛ مگر اینکه آن را در /etc/fstab ثبت کنید.
دائمی کردن Swap در /etc/fstab
برای اینکه Swap بعد از ریاستارت سرور هم فعال بماند، باید آن را به فایل /etc/fstab اضافه کنید.
ابتدا از فایل fstab بکاپ بگیرید:
sudo cp /etc/fstab /etc/fstab.bakسپس این خط را به انتهای fstab اضافه کنید:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabبرای اطمینان، محتوای fstab را بررسی کنید:
tail -n 5 /etc/fstabقبل از Reboot، بهتر است اعتبار fstab را بررسی کنید:
sudo findmnt --verify --verboseاگر خطایی وجود نداشت، میتوانید مطمئنتر Reboot کنید.
همچنین میتوانید همه ورودیهای fstab مربوط به Swap را تست کنید:
sudo swapoff /swapfile
sudo swapon -a
sudo swapon --showاگر بعد از swapon -a، فایل Swap دوباره فعال شد، یعنی تنظیم fstab درست است.
تنظیم vm.swappiness
vm.swappiness مشخص میکند کرنل لینوکس چقدر تمایل داشته باشد دادهها را از RAM به Swap منتقل کند. مقدار آن بین ۰ تا ۱۰۰ است.
- مقدار پایینتر یعنی سیستم کمتر به سمت Swap میرود.
- مقدار بالاتر یعنی سیستم تمایل بیشتری به استفاده از Swap دارد.
مقدار فعلی را بررسی کنید:
cat /proc/sys/vm/swappinessدر بسیاری از سیستمها مقدار پیشفرض ممکن است 60 باشد. برای سرورهای وب و VPSها، معمولاً مقدار محافظهکارانهتری مثل 10 یا 20 استفاده میشود تا سیستم تا حد امکان RAM را ترجیح دهد.
برای تغییر موقت تا Reboot بعدی:
sudo sysctl vm.swappiness=10برای دائمی کردن تنظیم، بهتر است یک فایل جدا در مسیر /etc/sysctl.d/ بسازید:
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.confسپس تنظیمات را بارگذاری کنید:
sudo sysctl --systemدوباره مقدار را بررسی کنید:
cat /proc/sys/vm/swappinessنکته: مقدار بسیار پایین همیشه بهترین انتخاب نیست. اگر RAM کم است و بار سرور نوسانی است، مقدار خیلی پایین ممکن است باعث شود سیستم دیرتر از Swap استفاده کند و زودتر تحت فشار قرار بگیرد. برای بسیاری از سرورهای وب، مقدار ۱۰ تا ۲۰ نقطه شروع مناسبی است، اما تصمیم نهایی باید با مانیتورینگ واقعی گرفته شود.
تنظیم vm.vfs_cache_pressure
vm.vfs_cache_pressure مشخص میکند کرنل چقدر تمایل داشته باشد cache مربوط به inode و dentry را آزاد کند. این cacheها برای عملکرد فایلسیستم مفید هستند.
مقدار فعلی را بررسی کنید:
cat /proc/sys/vm/vfs_cache_pressureمقدار پیشفرض معمولاً 100 است. در برخی سرورهای وب، کاهش آن به 50 میتواند باعث شود کرنل cacheهای فایلسیستم را بیشتر حفظ کند.
تغییر موقت:
sudo sysctl vm.vfs_cache_pressure=50دائمی کردن در همان فایل تنظیمات:
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.confبارگذاری تنظیمات:
sudo sysctl --systemاین تنظیم هم باید با مانیتورینگ واقعی انجام شود. برای همه سرورها یک مقدار ثابت و قطعی وجود ندارد.
تست و مانیتورینگ Swap
بعد از فعالسازی Swap، باید در روزها و هفتههای بعد مصرف آن را بررسی کنید. چند دستور مهم:
بررسی Swap فعال
sudo swapon --showبررسی RAM و Swap
free -hبررسی مصرف حافظه بهصورت لحظهای
topیا اگر نصب است:
htopبررسی رفتار حافظه با vmstat
vmstat 1 10در خروجی vmstat، ستونهای si و so اهمیت دارند:
si: مقدار دادهای که از Swap به RAM خوانده میشود.so: مقدار دادهای که از RAM به Swap نوشته میشود.
اگر این مقادیر دائماً بالا هستند، یعنی سرور مرتباً بین RAM و Swap جابهجایی دارد و احتمالاً با کمبود RAM واقعی روبهرو است.
بررسی OOM Killer بعد از فعالسازی Swap
sudo journalctl -k | grep -i "killed process"اگر همچنان پردازشها بهدلیل کمبود حافظه Kill میشوند، اضافه کردن Swap کافی نبوده و باید مصرف سرویسها یا مقدار RAM بررسی شود.
افزایش یا کاهش حجم Swap File
برای تغییر حجم Swap File، نمیتوانید همان فایل فعال را مستقیم کوچک یا بزرگ کنید. باید ابتدا Swap را خاموش کنید، فایل را حذف یا بازسازی کنید و دوباره فعال کنید.
فرض کنیم میخواهید Swap را از ۲ گیگابایت به ۴ گیگابایت تغییر دهید.
مرحله اول: خاموش کردن Swap
sudo swapoff /swapfileمرحله دوم: حذف فایل قبلی
sudo rm /swapfileمرحله سوم: ساخت فایل جدید
sudo fallocate -l 4G /swapfileیا با روش dd:
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اگر مسیر فایل همان /swapfile باقی مانده باشد، معمولاً نیازی به تغییر دوباره fstab ندارید.
غیرفعال و حذف کردن Swap
اگر دیگر به Swap نیاز ندارید یا میخواهید تنظیمات را از نو بسازید، مراحل زیر را انجام دهید.
غیرفعال کردن موقت Swap
sudo swapoff /swapfileحذف ورودی از /etc/fstab
فایل fstab را باز کنید:
sudo nano /etc/fstabخط زیر را حذف کنید یا با # کامنت کنید:
/swapfile none swap sw 0 0حذف فایل Swap
sudo rm /swapfileبررسی نهایی
sudo swapon --show
free -hاگر خروجی swapon --show خالی بود و خط Swap در free -h صفر بود، Swap حذف شده است.
رفع خطاهای رایج هنگام ساخت Swap
خطای swapon failed: Operation not permitted
این خطا ممکن است در کانتینرها، VPSهای محدود یا محیطهایی که اجازه فعالسازی Swap ندارند رخ دهد. در این حالت، باید بررسی کنید سرویسدهنده سرور یا لایه مجازیسازی اجازه Swap را میدهد یا نه.
خطای insecure permissions
اگر فایل Swap Permission باز داشته باشد، با هشدار امنیتی مواجه میشوید. راهحل:
sudo chmod 600 /swapfile
sudo swapon /swapfileخطای swapon: /swapfile: read swap header failed
یعنی فایل هنوز با mkswap آماده نشده است:
sudo mkswap /swapfile
sudo swapon /swapfileخطای swapon failed: Invalid argument
این خطا ممکن است به فایلسیستم، فایل sparse، یا روش ساخت فایل مربوط باشد. اگر با fallocate فایل ساختهاید، آن را حذف کنید و با dd بسازید:
sudo swapoff /swapfile 2>/dev/null
sudo rm -f /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfileسرور بعد از ویرایش fstab بوت نمیشود
اشتباه در /etc/fstab میتواند باعث مشکل در بوت شود. به همین دلیل همیشه قبل از ویرایش بکاپ بگیرید:
sudo cp /etc/fstab /etc/fstab.bakو قبل از Reboot این دستور را اجرا کنید:
sudo findmnt --verify --verboseSwap فعال است اما استفاده نمیشود
این موضوع الزاماً مشکل نیست. اگر RAM کافی در دسترس باشد، کرنل ممکن است نیازی به استفاده از Swap نداشته باشد. با این دستور وضعیت حافظه را بررسی کنید:
free -hاگر سرور بدون فشار حافظه کار میکند، استفاده نشدن از Swap طبیعی است.
نکات امنیتی و عملکردی Swap
۱. Swap را جایگزین RAM نکنید
Swap برای پایداری است، نه افزایش واقعی قدرت سرور. اگر سرویسها مرتباً Swap مصرف میکنند، باید RAM سرور را ارتقا دهید یا مصرف برنامهها را بهینه کنید.
۲. Permission فایل Swap باید ۶۰۰ باشد
چون Swap میتواند شامل دادههایی از حافظه برنامهها باشد، سطح دسترسی باز برای آن خطرناک است.
۳. روی SSD و NVMe مصرف دائمی Swap مطلوب نیست
استفاده گاهبهگاه از Swap طبیعی است، اما نوشتن دائمی و سنگین روی Swap هم عملکرد را پایین میآورد و هم فشار نوشتن روی دیسک ایجاد میکند.
۴. برای سرویسهای حساس به latency مراقب باشید
Redis، دیتابیسهای پرترافیک، Elasticsearch و سرویسهای Real-time معمولاً از Swap سنگین آسیب میبینند. در این سرویسها بهتر است حافظه کافی فراهم شود و رفتار Swap با دقت مانیتور شود.
۵. اگر دیسک رمزنگاری نشده، Swap هم رمزنگاری نشده است
در سرورهایی که دادههای حساس پردازش میکنند، باید به این نکته توجه شود که دادههای موجود در RAM ممکن است موقتاً وارد Swap شوند. اگر دیسک رمزنگاری نشده باشد، Swap هم میتواند ریسک افشای داده ایجاد کند.
۶. مصرف Swap را مانیتور کنید
فعال کردن Swap پایان کار نیست. باید مصرف آن را با ابزارهایی مثل free، top، htop، vmstat یا سیستمهای مانیتورینگ بررسی کنید.
Swap برای VPS و وردپرس
در سایتهای وردپرسی، مصرف RAM میتواند در زمانهایی مثل بکاپگیری، اجرای Cron، آپدیت افزونهها، ساخت کش، ایمپورت محصولات WooCommerce یا افزایش ترافیک بالا برود. اگر سرور RAM کمی داشته باشد، نبود Swap ممکن است باعث توقف MySQL یا PHP-FPM شود.
در یک VPS کوچک وردپرسی، فعالسازی Swap میتواند جلوی خطاهای ناگهانی را بگیرد. بااینحال، اگر سایت پرترافیک است یا فروشگاه WooCommerce دارید، اتکا به Swap کافی نیست. باید موارد زیر را هم بررسی کنید:
- تنظیم درست PHP-FPM و تعداد Workerها
- بهینهسازی MySQL یا MariaDB
- فعالسازی کش مناسب
- بررسی افزونههای سنگین وردپرس
- استفاده از Redis Object Cache در صورت نیاز
- ارتقای پلن VPS در صورت مصرف مداوم RAM
برای سایتهایی که نمیخواهند درگیر مدیریت دستی RAM، Swap، PHP-FPM و وبسرور شوند، استفاده از هاست وردپرس یا هاست لینوکس میتواند گزینه سادهتری باشد. اما اگر کنترل کامل میخواهید، سرور مجازی و اختصاصی انتخاب انعطافپذیرتری است.
چکلیست سریع ساخت Swap در Ubuntu
# 1. بررسی Swap فعلی
sudo swapon --show
free -h
# 2. بررسی فضای دیسک
df -h
# 3. ساخت Swap File دو گیگابایتی
sudo fallocate -l 2G /swapfile
# اگر fallocate مشکل داشت:
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
# 4. تنظیم Permission امن
sudo chmod 600 /swapfile
# 5. آمادهسازی و فعالسازی Swap
sudo mkswap /swapfile
sudo swapon /swapfile
# 6. بررسی فعال شدن
sudo swapon --show
free -h
# 7. بکاپ از fstab
sudo cp /etc/fstab /etc/fstab.bak
# 8. دائمی کردن Swap
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 9. اعتبارسنجی fstab
sudo findmnt --verify --verbose
# 10. تنظیم swappiness
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-swap.conf
sudo sysctl --systemسوالات متداول درباره ساخت Swap در اوبونتو
Swap چیست؟
Swap فضایی روی دیسک است که لینوکس هنگام کمبود RAM از آن بهعنوان حافظه کمکی استفاده میکند. Swap کندتر از RAM است، اما میتواند از توقف ناگهانی پردازشها جلوگیری کند.
آیا Swap سرعت سرور را زیاد میکند؟
خیر. Swap معمولاً سرعت را افزایش نمیدهد. هدف اصلی Swap افزایش پایداری در زمان کمبود RAM است. استفاده زیاد از Swap میتواند باعث کند شدن سرور شود.
آیا روی VPS باید Swap فعال کنیم؟
در بسیاری از VPSهای کوچک، فعال کردن Swap مفید است؛ مخصوصاً اگر RAM محدود باشد و سرویسهایی مثل MySQL، PHP-FPM یا Docker اجرا شوند. اما اگر سرور دائماً Swap مصرف میکند، باید RAM یا تنظیمات سرویسها بررسی شود.
برای Ubuntu چقدر Swap مناسب است؟
برای سرورهای کوچک، معمولاً ۱ تا ۲ گیگابایت Swap کافی است. برای سرورهای ۲ تا ۴ گیگابایت RAM، مقدار ۲ تا ۴ گیگابایت میتواند مناسب باشد. انتخاب نهایی به نوع سرویس و مصرف واقعی حافظه بستگی دارد.
چطور بفهمم Swap فعال است؟
از این دستورها استفاده کنید:
sudo swapon --show
free -hچرا swapon خطای Invalid argument میدهد؟
این خطا ممکن است به روش ساخت فایل یا فایلسیستم مربوط باشد. اگر فایل را با fallocate ساختهاید، آن را حذف کنید و با dd بسازید.
آیا میتوان چند Swap File داشت؟
بله. لینوکس میتواند چند Swap File یا Swap Partition داشته باشد. بااینحال، در بیشتر سرورهای معمول، یک Swap File کافی است.
آیا بعد از ساخت Swap باید سرور را ریاستارت کنیم؟
خیر. با دستور swapon Swap بلافاصله فعال میشود. اما برای اطمینان از فعال شدن بعد از Reboot، باید آن را در /etc/fstab ثبت کنید.
swappiness را روی چند بگذاریم؟
برای بسیاری از سرورهای وب، مقدار ۱۰ تا ۲۰ نقطه شروع مناسبی است. اما عدد قطعی وجود ندارد و باید بر اساس مانیتورینگ واقعی تنظیم شود.
چطور Swap را حذف کنم؟
ابتدا آن را خاموش کنید، سپس خط مربوط به آن را از /etc/fstab حذف کنید و در نهایت فایل را پاک کنید:
sudo swapoff /swapfile
sudo nano /etc/fstab
sudo rm /swapfileآیا Swap برای Redis مناسب است؟
Redis به حافظه و latency حساس است. اگر Redis بهطور جدی وارد Swap شود، عملکرد آن ممکن است بهشدت افت کند. برای Redis بهتر است RAM کافی فراهم شود و Swap فقط نقش اضطراری داشته باشد.
جمعبندی
ساخت Swap در اوبونتو یکی از سادهترین و درعینحال کاربردیترین روشها برای افزایش پایداری سرورهای کوچک و متوسط است. با ساخت یک Swap File، تنظیم Permission امن، فعالسازی با mkswap و swapon و ثبت آن در /etc/fstab، میتوانید کاری کنید سرور در زمان کمبود RAM بهجای توقف ناگهانی پردازشها، فرصت بیشتری برای مدیریت حافظه داشته باشد.
بااینحال، Swap نباید جایگزین RAM واقعی شود. اگر مصرف Swap دائمی است یا مقدار si و so در vmstat مرتباً بالا میرود، باید مصرف سرویسها، تنظیمات PHP-FPM، دیتابیس، Docker، کش و منابع سرور را بررسی کنید. در چنین شرایطی، ارتقای RAM یا انتخاب پلن مناسبتر راهحل اصلی است.
برای سایتها و سرویسهایی که روی VPS ایران، VPS آلمان یا سرور مجازی و اختصاصی اجرا میشوند، فعالسازی اصولی Swap، در کنار مانیتورینگ منابع، تنظیم صحیح سرویسها و بکاپ منظم، میتواند نقش مهمی در پایداری زیرساخت داشته باشد.
