ตั้งค่า Swap Memory บน VPS เมื่อ RAM ไม่พอ — คู่มือฉบับสมบูรณ์

เมื่อ RAM บน VPS ของคุณไม่เพียงพอต่อการรันแอปพลิเคชัน ระบบจะเริ่มแสดงอาการ เช่น Process ถูก Kill อัตโนมัติ, Out of Memory Error หรือเซิร์ฟเวอร์ค้าง การตั้งค่า Swap Memory เป็นหนึ่งในวิธีแก้ปัญหาที่เร็วที่สุด โดยใช้พื้นที่ Disk บางส่วนมาทำหน้าที่เป็น RAM สำรอง

Swap Memory คืออะไร?

Swap คือพื้นที่บน Disk (SSD/HDD) ที่ Linux ใช้เป็น RAM เสมือน เมื่อ Physical RAM เต็ม ระบบจะย้าย Data ที่ไม่ได้ใช้งานบ่อยจาก RAM ไปไว้ใน Swap แทน ทำให้ RAM ว่างขึ้นสำหรับ Process ที่ต้องการมากกว่า

ข้อดีของ Swap: ป้องกัน OOM Killer จาก Kill Process สำคัญ, ช่วยให้ระบบรอดจากช่วง RAM Spike ชั่วคราว, เหมาะกับ VPS ที่มี RAM น้อย (1–2 GB)

ข้อจำกัด: Swap ช้ากว่า RAM หลายเท่า เนื่องจากอ่าน/เขียน Disk จึงไม่ควรพึ่งพา Swap แทน RAM จริง และควรใช้เป็นตัวช่วยชั่วคราวเท่านั้น

ตรวจสอบ Swap ปัจจุบัน

ก่อนเริ่มตั้งค่า ให้ตรวจดูว่ามี Swap อยู่แล้วหรือไม่:

# ตรวจสอบ Swap ที่มีอยู่
swapon --show

# ดู RAM และ Swap รวม
free -h

# ดู Swap file/partition
cat /proc/swaps

ถ้าไม่มี Output หรือ Swap แสดงเป็น 0 แสดงว่าระบบยังไม่มี Swap

ขั้นตอนการสร้าง Swap File

ขั้นที่ 1 — ตรวจสอบพื้นที่ Disk ว่าง

df -h

ตรวจให้แน่ใจว่ามีพื้นที่ว่างเพียงพอก่อนสร้าง Swap

ขั้นที่ 2 — สร้าง Swap File ด้วย fallocate

# สร้าง Swap ขนาด 2GB (แนะนำสำหรับ VPS RAM 1-2GB)
sudo fallocate -l 2G /swapfile

# ถ้า fallocate ไม่ work ให้ใช้ dd แทน
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

ขั้นที่ 3 — ตั้งค่า Permission ให้ถูกต้อง

# ให้สิทธิ์เฉพาะ root เท่านั้น (สำคัญมากด้านความปลอดภัย)
sudo chmod 600 /swapfile

# ตรวจสอบ permission
ls -lh /swapfile
# ควรแสดง: -rw------- 1 root root 2.0G

ขั้นที่ 4 — Format เป็น Swap

sudo mkswap /swapfile

ขั้นที่ 5 — เปิดใช้งาน Swap

sudo swapon /swapfile

# ตรวจสอบว่า Swap ทำงานแล้ว
swapon --show
free -h

ตั้งค่าให้ Swap ทำงานอัตโนมัติหลัง Reboot

โดย Default การตั้งค่าด้านบนจะหายไปเมื่อ Reboot ต้องเพิ่ม Entry ใน /etc/fstab เพื่อให้ Swap Mount อัตโนมัติทุกครั้ง:

# Backup fstab ก่อนแก้ไข
sudo cp /etc/fstab /etc/fstab.bak

# เพิ่ม Swap entry
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# ตรวจสอบ
cat /etc/fstab | grep swap

ปรับแต่ง Swappiness

Swappiness คือค่าที่กำหนดว่าระบบจะโอน Data ไปใช้ Swap เร็วแค่ไหน มีค่าระหว่าง 0–100:

  • 0 = ใช้ Swap เมื่อ RAM เต็มสนิทเท่านั้น
  • 10 = แนะนำสำหรับ Server (ใช้ Swap เมื่อ RAM เหลือน้อยมาก)
  • 60 = ค่า Default ของ Ubuntu (ใช้ Swap ค่อนข้างเร็ว)
  • 100 = ใช้ Swap เกือบตลอดเวลา
# ดูค่า swappiness ปัจจุบัน
cat /proc/sys/vm/swappiness

# เปลี่ยนชั่วคราว (หายหลัง Reboot)
sudo sysctl vm.swappiness=10

# เปลี่ยนถาวร
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

ปรับ vfs_cache_pressure

ค่า vfs_cache_pressure ควบคุมว่าระบบจะ Cache ข้อมูล Filesystem มากแค่ไหน ค่า Default คือ 100 การลดเหลือ 50 จะช่วยให้ระบบ Cache ข้อมูลมากขึ้นซึ่งดีกว่าสำหรับ Server:

# เปลี่ยนถาวร
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

ตรวจสอบและ Monitor การใช้งาน Swap

# ดู RAM และ Swap overview
free -h

# ดู Swap usage แบบ Real-time
watch -n 1 free -h

# ดูว่า Process ไหนใช้ Swap มากสุด
for file in /proc/*/status; do
  awk '/VmSwap|Name/{printf $2 " " $3 "\n"}' $file
done | sort -k 2 -n -r | head -10

# ดู Swap IO statistics
vmstat 1 5

ขนาด Swap ที่แนะนำ

RAM ที่มี ขนาด Swap แนะนำ หมายเหตุ
1 GB 2 GB ช่วยรับมือ Memory Spike
2 GB 2–4 GB ใช้ 2x RAM เป็นกฎทั่วไป
4 GB 4 GB 1x RAM ก็เพียงพอ
8 GB+ 4–8 GB หรือไม่ใช้เลย RAM มากพอแล้ว

การลบ Swap File (ถ้าต้องการ)

# ปิด Swap ก่อน
sudo swapoff /swapfile

# ลบ entry จาก /etc/fstab
sudo nano /etc/fstab
# ลบบรรทัด: /swapfile none swap sw 0 0

# ลบ Swap file
sudo rm /swapfile

สรุป

Swap Memory เป็น Safety Net ที่ช่วยให้ VPS ของคุณรอดจากสถานการณ์ RAM เต็มโดยไม่ Crash แต่ควรมองว่าเป็นมาตรการเสริม ไม่ใช่ทางเลือกแทน RAM จริง หาก Swap ถูกใช้งานอย่างต่อเนื่อง นั่นเป็นสัญญาณว่าควร Upgrade Plan VPS ให้มี RAM มากขึ้น

สำหรับ Cloud VPS จาก Dot Enterprise แนะนำให้ตั้ง Swap ตามตารางด้านบนเพื่อให้ระบบทำงานได้อย่างเสถียร โดยเฉพาะ Plan ที่มี RAM 1–2 GB