اگر روی سرور لینوکسی با خطاهایی مثل کند شدن شدید سرویس‌ها، متوقف شدن 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 بخشی از فضای ذخیره‌سازی دیسک است که سیستم‌عامل لینوکس می‌تواند هنگام کمبود 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 روی دیسک ذخیره می‌شود؛ بنابراین سرعت آن به‌مراتب کمتر است.

ویژگیRAMSwap
محل ذخیرهحافظه فیزیکیدیسک، SSD یا NVMe
سرعتبسیار سریعکندتر از RAM
کاربرداجرای اصلی برنامه‌هاحافظه کمکی هنگام فشار
مناسب برای استفاده دائمیبلهخیر
اثر روی عملکردافزایش سرعتدر مصرف زیاد باعث کندی می‌شود

بنابراین Swap راه‌حل افزایش کارایی نیست؛ بلکه بیشتر یک ابزار پایداری است. اگر سرور شما مرتباً Swap مصرف می‌کند، به این معنی است که باید مصرف حافظه برنامه‌ها را بررسی کنید یا RAM سرور را افزایش دهید.

تفاوت Swap File و Swap Partition

در لینوکس می‌توان Swap را به دو شکل ایجاد کرد:

  • Swap Partition: یک پارتیشن اختصاصی روی دیسک
  • Swap File: یک فایل معمولی که به‌عنوان Swap استفاده می‌شود

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

ویژگیSwap FileSwap Partition
ایجادساده و سریعنیازمند پارتیشن‌بندی
تغییر اندازهآسان‌ترپیچیده‌تر
مناسب برای VPSبلهکمتر رایج
نیاز به Repartitionخیرمعمولاً بله

در این مقاله از روش Swap File استفاده می‌کنیم؛ چون برای Ubuntu روی سرورهای ابری و VPS انتخاب عملی‌تری است.

چه مقدار Swap برای سرور مناسب است؟

هیچ عدد واحدی برای همه سرورها وجود ندارد. مقدار مناسب Swap به RAM، نوع سرویس، حجم ترافیک، نوع دیسک و اهمیت پایداری بستگی دارد.

برای سرورهای عمومی و VPS، این جدول می‌تواند نقطه شروع مناسبی باشد:

RAM سرورSwap پیشنهادیتوضیح
512MB تا 1GB1GB تا 2GBبرای جلوگیری از Crash در سرورهای کوچک
2GB2GBمناسب برای سایت‌های سبک و سرویس‌های کوچک
4GB2GB تا 4GBبسته به مصرف MySQL، PHP-FPM یا Docker
8GB2GB تا 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 --verbose

Swap فعال است اما استفاده نمی‌شود

این موضوع الزاماً مشکل نیست. اگر 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، در کنار مانیتورینگ منابع، تنظیم صحیح سرویس‌ها و بکاپ منظم، می‌تواند نقش مهمی در پایداری زیرساخت داشته باشد.

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