server RAM memory

Swap Memory บน VPS คืออะไร ควรตั้งค่าไหม?

มิถุนายน 2026 · อ่าน 5 นาที

VPS RAM น้อยมักหยุดทำงานกะทันหันเมื่อหน่วยความจำเต็ม Swap เป็นทางออกฉุกเฉินที่ช่วยให้ระบบยังทำงานต่อได้ แต่มาพร้อมข้อเสียที่ต้องรู้


Swap คืออะไร

Swap คือพื้นที่ disk ที่ Linux ใช้เป็นส่วนขยายของ RAM เมื่อ RAM เต็ม ระบบจะย้าย memory page ที่ไม่ได้ใช้งานบ่อยออกไปเก็บใน Swap และนำ RAM ว่างมาใช้งานแทน

ข้อเสียหลัก: Disk ช้ากว่า RAM หลายร้อยถึงพันเท่า เมื่อระบบเริ่ม swap หนัก ๆ server จะช้ามาก แต่ยังดีกว่า OOM Killer ที่จะ kill process ทันที

ควรมี Swap ไหม?

สถานการณ์คำแนะนำ
RAM 1 GB หรือน้อยกว่าควรมี Swap อย่างน้อย 1–2 GB
RAM 2–4 GBมี Swap 1–2 GB ช่วยรับมือ spike
RAM 8 GB ขึ้นไปไม่จำเป็น แต่มีก็ไม่เสียหาย
SSD NVMeSwap บน SSD เร็วกว่า HDD มาก ไม่เสียหายถ้ามี
Database productionหลีกเลี่ยง Swap — latency spike ส่งผลต่อ query time

สร้าง Swap File

# สร้างไฟล์ขนาด 2GB
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# ตรวจสอบ
free -h
swapon --show

ให้ใช้ได้ถาวรหลัง reboot เพิ่มใน /etc/fstab:

/swapfile  none  swap  sw  0  0

ปรับ Swappiness

Swappiness คือค่าที่บอก kernel ว่าควรรีบย้าย memory ไป Swap เร็วแค่ไหน ค่า 0–100 ค่า default คือ 60

# เปลี่ยนชั่วคราว
sysctl vm.swappiness=10

# เปลี่ยนถาวร — เพิ่มใน /etc/sysctl.conf
vm.swappiness=10

ตรวจสอบการใช้ Swap

# ดูสถิติ Swap
vmstat -s | grep swap

# ดู process ที่ใช้ Swap มากที่สุด
for pid in /proc/[0-9]*/status; do
  awk '/VmSwap/{printf "%s %s\n", FILENAME, $2" "$3}' $pid 2>/dev/null
done | sort -k3 -rn | head -10

ปรับขนาด Swap ที่มีอยู่แล้ว

ถ้าต้องการขยาย Swap หรือย้ายไปไฟล์อื่น:

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

# ขยายขนาด (ตัวอย่าง: เพิ่มเป็น 4G)
fallocate -l 4G /swapfile
mkswap /swapfile
swapon /swapfile

# ตรวจสอบ
free -h
swapon --show
NVMe vs HDD: บน VPS ที่ใช้ NVMe SSD swap ทำงานเร็วกว่า HDD มาก latency ต่างกัน 10–50 เท่า ถ้า disk เป็น NVMe การมี swap ไม่ค่อยกระทบ performance มากนัก

ตั้ง vm.vfs_cache_pressure

ค่านี้บอก kernel ว่าให้เร็วแค่ไหนในการ free memory ที่ใช้เก็บ directory/inode cache เพื่อนำมาใช้งาน:

# ค่า default = 100
# ลงต่ำกว่า 100 = ให้ cache อยู่นานขึ้น (ดีสำหรับ file-heavy workloads)
# สูงกว่า 100 = ให้ free cache เร็วขึ้น (ดีเมื่อ RAM ตึงมาก)
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
sysctl -p

ตรวจสอบว่า Swap ทำงานถูกต้อง

หลังสร้าง swap และตั้ง swappiness แล้ว ยืนยันว่า kernel เห็น swap และค่าถูกใช้จริง รวมถึงตั้ง persistent หลัง reboot:

# 1. swap ถูก activate แล้วหรือยัง
swapon --show
free -h        # ดูบรรทัด Swap: ต้องไม่เป็น 0

# 2. ยืนยันค่า swappiness ปัจจุบัน
cat /proc/sys/vm/swappiness

# 3. ตรวจว่า swap จะ mount อัตโนมัติหลัง reboot
grep swap /etc/fstab

# 4. ดูว่า process ไหนใช้ swap มากที่สุด
for f in /proc/*/status; do awk '/VmSwap|Name/{printf $2" "$3}END{print ""}' $f; done | sort -k2 -n -r | head
Tip: ถ้า free -h เห็น swap เต็มตลอดเวลาแม้ RAM ยังว่าง แปลว่า swappiness สูงเกินไป — ลดเป็น 10 บนเซิร์ฟเวอร์ฐานข้อมูล/แอป แต่ถ้า swap เต็ม "พร้อมกับ" RAW เต็ม คือสัญญาณว่าต้องเพิ่ม RAM จริง ไม่ใช่แค่ขยาย swap

แก้ปัญหาที่พบบ่อย

Swap ไม่ถูกใช้หลัง reboot ทั้งที่ตั้งใน /etc/fstab แล้ว

ตรวจสอบ syntax ใน /etc/fstab และ permission ของ swapfile:

# ตรวจว่ามีใน fstab
grep swap /etc/fstab
# ควรเห็น: /swapfile  none  swap  sw  0  0

# ตรวจ permission
ls -la /swapfile
# ควรเป็น -rw------- (600) เท่านั้น ถ้าไม่ใช่จะสร้าง swap ไม่ได้

chmod 600 /swapfile
swapon /swapfile

ระบบ swap อย่างหนักทั้งที่ RAM ยังเหลืออยู่

เกิดจาก swappiness สูงเกินไป (default 60) kernel ย้าย page ออก swap เร็วมาก ให้ลดลง:

cat /proc/sys/vm/swappiness   # ดูค่าปัจจุบัน
sysctl vm.swappiness=10       # เปลี่ยนชั่วคราว

# ถ้าได้ผล ให้เพิ่มใน /etc/sysctl.conf
echo 'vm.swappiness=10' >> /etc/sysctl.conf

fallocate: fallocate failed: Operation not supported

เกิดบน VPS ที่ใช้ filesystem บางประเภท เช่น btrfs ให้ใช้ dd แทน:

dd if=/dev/zero of=/swapfile bs=1M count=2048   # 2GB
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

OOM Killer kill process ทั้งที่มี Swap อยู่

เกิดเพราะ swap เต็มด้วย หรือ process มี oom_score_adj สูง ดู log:

dmesg | grep -i "oom\|killed process"
# ดูว่า process ไหนถูก kill และ swap ใช้ไปเท่าไรแล้ว
free -h
swapon --show

คำถามที่พบบ่อย

VPS RAM 1 GB ควรตั้ง Swap ไว้กี่ GB?

2 GB เป็นค่าที่แนะนำ ได้ buffer เพียงพอสำหรับ memory spike ชั่วคราวโดยไม่เปลือง disk มาก ถ้า disk มีพื้นที่มากและ workload หนัก (เช่น compile code) อาจตั้ง 4 GB ก็ได้

ทำ Swap ใน container (Docker) ได้ไหม?

ขึ้นอยู่กับ host และ cgroup config ถ้า VPS ใช้ KVM สามารถ swap ได้ปกติ ถ้าเป็น OpenVZ/LXC บางค่ายไม่รองรับ swap หรือ limit ไว้ ตรวจสอบด้วย swapon --show หลัง setup

Swap บน SSD สร้างปัญหา wear ของ disk ไหม?

สำหรับ VPS hosting ไม่ใช่ disk ของตัวเอง ไม่ต้องกังวล สำหรับ home server ที่ swap ใช้งานหนักมาก อาจมีผลกระทบต่อ SSD lifespan ในระยะยาว แต่ VPS ส่วนใหญ่ใช้ enterprise SSD ที่ TBW สูงมาก

ความแตกต่างระหว่าง Swap Partition กับ Swap File?

Swap Partition มักเร็วกว่าเล็กน้อย (โดยตรงกับ disk block ไม่ผ่าน filesystem) แต่ปรับขนาดยากกว่า Swap File ปรับขนาดและลบได้ง่ายกว่า สำหรับ VPS modern ที่ใช้ SSD ความต่างด้าน performance แทบไม่มีนัย


สรุป

Swap ไม่ใช่ทางแก้ปัญหา RAM น้อยในระยะยาว แต่เป็นตัวช่วยที่ดีในการป้องกันระบบล่มเมื่อเจอ traffic spike หรือ memory leak ที่ไม่คาดคิด ถ้า Swap ถูกใช้งานประจำ นั่นเป็นสัญญาณว่าควรอัปเกรด RAM และควรลด swappiness เหลือ 10 เพื่อใช้ RAM ให้เต็มประสิทธิภาพก่อน