ตั้งค่า Swap Space บน VPS Linux เมื่อ RAM ไม่พอ

หนึ่งในปัญหาที่ผู้ใช้ VPS สเปคเล็กพบบ่อยที่สุดคือ RAM หมด กะทันหัน โดยเฉพาะเมื่อรัน MySQL, Apache หรือ Node.js พร้อมกันหลายตัว ผลคือ Process ถูก OOM Killer (Out of Memory Killer) ของ Linux ยิงทิ้งโดยไม่เตือน เว็บล่มโดยไม่มีสาเหตุชัดเจน

Swap Space คือพื้นที่บน SSD ที่ Linux ใช้เป็น RAM เสริมชั่วคราว เมื่อ Physical RAM เต็ม ข้อมูลที่ไม่ได้ใช้งานบ่อยจะถูกย้ายไปไว้บน Swap ทำให้ระบบยังทำงานต่อได้แทนที่จะ Crash

สิ่งที่ต้องมีก่อน: VPS Ubuntu 20.04 / 22.04 / 24.04 พร้อม Root หรือ Sudo access, พื้นที่ SSD ว่างอย่างน้อย 1–2 GB

Swap Space คืออะไร ต่างจาก RAM อย่างไร?

RAM (Random Access Memory) คือหน่วยความจำหลักที่ CPU เข้าถึงได้เร็วมาก ส่วน Swap คือพื้นที่บน Storage (SSD หรือ HDD) ที่ถูกกันไว้ใช้เป็น "RAM สำรอง" เมื่อ Physical RAM เต็ม

ความต่างหลักคือ ความเร็ว — Swap บน SSD ช้ากว่า RAM ประมาณ 10–100 เท่า แต่ดีกว่าให้ Process ถูก Kill ทิ้งอย่างมาก Swap ไม่ได้แก้ปัญหา RAM ไม่พอในระยะยาว แต่ช่วย "รับแรงกระแทก" เมื่อมี Load สูงชั่วคราว

หมายเหตุ: VPS บาง Provider ห้ามสร้าง Swap file บน Shared Storage หรืออาจจำกัดการใช้งาน ให้ตรวจสอบกับทีมซัพพอร์ตก่อน สำหรับ AsiaGB VPS สร้าง Swap ได้ทุกแพ็กเกจ

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

แนวทางทั่วไปสำหรับ VPS:

RAM จริงขนาด Swap ที่แนะนำใช้สำหรับ
512 MB – 1 GB2 GBเว็บ + PHP เล็ก
2 GB2–4 GBWordPress + MySQL
4 GB2–4 GBNode.js / Python App
8 GB ขึ้นไป2 GB (optional)Swap แทบไม่จำเป็น

ไม่แนะนำให้ตั้ง Swap ใหญ่เกินไป เพราะ Swap บน SSD มีจำนวน Write Cycle จำกัด การ Swap บ่อย ๆ ในระยะยาวจะสึกหรอ Storage

ขั้นที่ 1 — ตรวจสอบ Swap ปัจจุบัน

ก่อนสร้าง Swap ให้ตรวจว่ามีอยู่แล้วหรือไม่:

sudo swapon --show

ถ้าไม่มี Output แสดงว่ายังไม่มี Swap ตรวจสอบ RAM และ Disk ที่ว่าง:

free -h
df -h

ขั้นที่ 2 — สร้าง Swap File

สร้าง Swap file ขนาด 2 GB (ปรับตัวเลขตามต้องการ):

# สร้างไฟล์ขนาด 2G (เปลี่ยน 2G เป็น 4G ถ้าต้องการใหญ่กว่านี้)
sudo fallocate -l 2G /swapfile

ถ้า fallocate ไม่รองรับ filesystem ของคุณ ใช้ dd แทน:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

ขั้นที่ 3 — ตั้งค่า Permission และเปิดใช้งาน

กำหนด Permission ให้ถูกต้องก่อน — Swap file ที่ทุกคนอ่านได้เป็น Security Risk:

# ให้ root อ่าน/เขียนได้เท่านั้น
sudo chmod 600 /swapfile

# สร้าง Swap signature
sudo mkswap /swapfile

# เปิดใช้งาน Swap ทันที
sudo swapon /swapfile

ตรวจสอบว่า Swap ทำงานแล้ว:

sudo swapon --show
free -h

ควรเห็น Swap line ใน free -h แสดงขนาดที่สร้างไว้

ขั้นที่ 4 — ทำให้ Swap คงอยู่หลัง Reboot (/etc/fstab)

Swap ที่เปิดด้วย swapon จะหายไปหลัง Reboot ต้องเพิ่มใน /etc/fstab เพื่อให้ mount อัตโนมัติ:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

ตรวจสอบว่าเพิ่มถูกต้อง:

cat /etc/fstab | grep swap

ควรเห็น: /swapfile none swap sw 0 0

ขั้นที่ 5 — ปรับ Swappiness

Swappiness คือค่า 0–100 ที่บอกให้ Linux รู้ว่าควรย้ายข้อมูลไป Swap "เร็วแค่ไหน" เมื่อ RAM ยังไม่เต็ม:

VPS ที่รันเว็บไซต์ควรใช้ค่า 10 เพื่อให้ Process อยู่ใน RAM ให้นานที่สุด:

# ดูค่าปัจจุบัน
cat /proc/sys/vm/swappiness

# เปลี่ยนชั่วคราว (มีผลจนกว่าจะ Reboot)
sudo sysctl vm.swappiness=10

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

ขั้นที่ 6 — ปรับ Cache Pressure (ตัวเลือก)

vfs_cache_pressure กำหนดว่า Linux จะยอมล้าง Cache สำหรับ Directory/Inode เร็วแค่ไหน ค่า Default คือ 100 สำหรับ Server แนะนำ 50:

echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

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

ติดตามการใช้ Swap แบบ Real-time:

# ดู Swap ใน free
free -h

# ดู Process ที่ใช้ Swap มากที่สุด
for file in /proc/*/status; do
  awk '/VmSwap|Name/{printf $2 " " $3 "\n"}' $file
done 2>/dev/null | sort -k2 -n -r | head -10

# ตรวจสอบแบบง่าย
vmstat -s | grep -i swap

ตั้งค่า Swap บน Linux VPS เมื่อ RAM ไม่พอ — สรุปทีละขั้นแบบครบจบ

สำหรับผู้ที่อยากได้ลำดับขั้นตอนแบบรวบรัดทั้งหมดในที่เดียว ตั้งแต่ตรวจสอบจนถึงเปิดใช้งานถาวร ด้านล่างคือ Workflow มาตรฐานที่ใช้ได้กับ Ubuntu 20.04 ถึง 24.04 บน VPS สเปคเล็กที่ RAM ไม่พอ โดยเฉพาะเมื่อรัน WordPress, MySQL หรือ Node.js พร้อมกัน ขั้นตอนเหล่านี้ปลอดภัยและไม่ต้อง Reboot เครื่องระหว่างทำ:

# 1) ตรวจ Swap และ RAM ปัจจุบัน
sudo swapon --show
free -h
df -h

# 2) สร้าง Swap file ขนาด 2G (จองพื้นที่ทันที)
sudo fallocate -l 2G /swapfile

# 3) ล็อก permission ให้ root อ่าน/เขียนเท่านั้น (กัน Security Risk)
sudo chmod 600 /swapfile

# 4) สร้าง Swap signature + เปิดใช้งานทันที
sudo mkswap /swapfile
sudo swapon /swapfile

# 5) ทำให้คงอยู่หลัง Reboot
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 6) ยืนยันผล — ควรเห็นบรรทัด Swap ใน free -h
free -h

ถ้า fallocate ใช้ไม่ได้บางระบบไฟล์ (เช่น ZFS หรือ Container บางชนิด) ให้สลับไปใช้ dd สร้างไฟล์ทีละบล็อกแทน แล้วทำขั้นที่ 3 เป็นต้นไปเหมือนเดิม วิธีนี้ช้ากว่าเล็กน้อยแต่รองรับทุกระบบไฟล์:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress

เคล็ดลับ: ถ้า VPS ของคุณเริ่มมี RAM ไม่พอบ่อยครั้งจนต้องพึ่ง Swap ตลอดเวลา นั่นเป็นสัญญาณว่าควรอัปเกรดแพ็กเกจ Swap ช่วยรับแรงกระแทกชั่วคราวได้ แต่ไม่ได้ทำให้เครื่องเร็วขึ้น AsiaGB VPS เริ่มต้น 500 บาท/เดือน บน SSD สามารถปรับสเปท RAM/CPU ได้ตามการใช้งานจริง

ควรตั้ง Swap ขนาดเท่าไหร่ (อ้างอิงตาม RAM)

คำถามยอดฮิตคือ "ควรตั้ง Swap ใหญ่แค่ไหน?" คำตอบขึ้นกับขนาด RAM จริงและประเภทงานที่รัน หลักการคือ VPS ที่มี RAM น้อยควรมี Swap เป็นสัดส่วนมากกว่า RAM (เพื่อกัน OOM Killer) ส่วน VPS ที่ RAM เยอะแล้วแทบไม่จำเป็นต้องมี Swap ใหญ่ ตารางต่อไปนี้เป็นแนวทางที่ใช้ได้จริงกับ VPS รันเว็บไซต์/ฐานข้อมูล:

RAM จริงSwap แนะนำSwappinessเหมาะกับงาน
512 MB1–2 GB (2–4× RAM)10เว็บนิ่ง ๆ + PHP เล็ก
1 GB2 GB (2× RAM)10WordPress 1 เว็บ
2 GB2–4 GB (1–2× RAM)10WordPress + MySQL หลายเว็บ
4 GB2–4 GB (0.5–1× RAM)10Node.js / Python / E-Commerce
8 GB2 GB (เผื่อ buffer)10App หนัก / Container
16 GB ขึ้นไป0–2 GB (เกือบไม่จำเป็น)1–10Database server / งาน RAM-bound

ตัวเลขเหล่านี้ไม่ใช่กฎตายตัว — ปรับตาม Workload จริงได้ เช่น ถ้ารัน MySQL ที่ตั้ง innodb_buffer_pool_size ไว้สูง ควรเหลือ RAM ว่างพอและไม่พึ่ง Swap มาก ในทางกลับกัน VPS 512 MB ที่ต้องรัน WordPress + PHP-FPM + MySQL พร้อมกันมักต้องมี Swap อย่างน้อย 2 GB เพื่อไม่ให้ Process ถูก Kill ทิ้งตอนมีคนเข้าเว็บพร้อมกันหลายคน

หลีกเลี่ยง Swap ที่ใหญ่เกินจำเป็น: Swap 8 GB บน VPS RAM 1 GB ไม่ได้ทำให้เครื่องดีขึ้น แต่กลับเสี่ยงให้ระบบ "ดูเหมือนทำงาน" ทั้งที่ช้ามากเพราะข้อมูลส่วนใหญ่อยู่บน SSD แทน RAM ทำให้ตอบสนองช้าจนผู้ใช้คิดว่าเว็บค้าง

ปรับ Swappiness และ vfs_cache_pressure ให้เหมาะกับเซิร์ฟเวอร์

หลังสร้าง Swap แล้ว สองค่าที่ควรปรับเพิ่มเพื่อให้ VPS ใช้ Swap อย่างชาญฉลาดคือ vm.swappiness และ vm.vfs_cache_pressure ทั้งคู่ตั้งผ่าน sysctl และทำให้ถาวรได้ใน /etc/sysctl.conf

vm.swappiness — บอกว่าจะรีบใช้ Swap แค่ไหน

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

# ดูค่าปัจจุบัน (Ubuntu default = 60)
cat /proc/sys/vm/swappiness

# ตั้งถาวร = 10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

vm.vfs_cache_pressure — เก็บ Cache metadata ให้นานขึ้น

ค่า Default คือ 100 การลดเหลือ 50 จะทำให้ Linux เก็บ Cache ของ Directory/Inode (dentry และ inode cache) ไว้นานขึ้น ลดการอ่าน Disk ซ้ำ ๆ ซึ่งช่วยลดการ Swap ทางอ้อม เหมาะกับ VPS ที่มีไฟล์เยอะ เช่น WordPress ที่มีปลั๊กอินจำนวนมาก:

echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

ตรวจสอบว่าค่าถูกนำไปใช้แล้ว:

sysctl vm.swappiness vm.vfs_cache_pressure

ควรเห็นผลลัพธ์ vm.swappiness = 10 และ vm.vfs_cache_pressure = 50 ถ้าตัวเลขยังเป็นค่าเดิม ให้ตรวจว่าไม่มีบรรทัดซ้ำใน /etc/sysctl.conf และไม่มีไฟล์ใน /etc/sysctl.d/ ที่เขียนทับค่าทีหลัง

ข้อควรระวังในการใช้ Swap บน VPS

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

วิธีปิด Swap ชั่วคราว/ถาวรอย่างปลอดภัย: ปิดชั่วคราวด้วย sudo swapoff /swapfile (เปิดกลับด้วย sudo swapon /swapfile) ส่วนการปิดถาวรต้องลบบรรทัดออกจาก /etc/fstab ด้วย ไม่งั้น Swap จะกลับมา mount เองหลัง Reboot

วิธีลบ Swap File (ถ้าต้องการ)

ถ้าต้องการเปลี่ยนขนาดหรือลบ Swap ออก:

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

# ลบออกจาก fstab
sudo sed -i '/swapfile/d' /etc/fstab

# ลบไฟล์
sudo rm /swapfile

ข้อควรระวัง: ถ้า Swap ถูกใช้งานอยู่มาก การรัน swapoff จะช้ามากหรืออาจค้าง เพราะระบบต้องย้ายข้อมูลกลับมาที่ RAM ควรลบ Swap เฉพาะเมื่อ RAM ว่างพอรับข้อมูลทั้งหมดได้

สรุปคำสั่งทั้งหมด (Quick Setup)

ต้องการตั้งค่า Swap 2 GB อย่างรวดเร็ว รัน Script นี้ทีเดียว:

#!/bin/bash
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo "✅ Swap 2G สร้างเสร็จแล้ว"
free -h

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

Swap ช่วยให้ VPS เร็วขึ้นไหม?

ไม่ Swap ไม่ได้ทำให้เครื่องเร็วขึ้น เพราะ Swap อยู่บน SSD ซึ่งช้ากว่า RAM 10–100 เท่า หน้าที่ของ Swap คือ "กันเครื่องล่ม" เมื่อ RAM เต็ม โดยรับข้อมูลที่ใช้น้อยไว้ชั่วคราว ทำให้ Process ไม่ถูก OOM Killer ยิงทิ้ง ถ้าต้องการความเร็วจริง ๆ ต้องเพิ่ม RAM ไม่ใช่เพิ่ม Swap

VPS RAM 1 GB ควรตั้ง Swap เท่าไหร่?

แนะนำ 2 GB (ประมาณ 2 เท่าของ RAM) พร้อมตั้ง vm.swappiness=10 ขนาดนี้เพียงพอสำหรับรัน WordPress + MySQL + PHP-FPM บนเว็บที่มีทราฟฟิกปานกลาง และช่วยรับแรงกระแทกตอนมีผู้เข้าชมพร้อมกันหลายคนโดยไม่ให้ Process ถูก Kill

Swap กิน SSD ให้พังเร็วจริงไหม?

ถ้าตั้ง Swappiness ต่ำ (10) และเครื่องไม่ได้ Swap หนักตลอดเวลา การสึกหรอจะน้อยมากจนแทบไม่ต้องกังวล แต่ถ้าเครื่อง Swap เข้า-ออกถี่ตลอดทั้งวัน (Thrashing) จะกิน Write Cycle ของ SSD เร็วกว่าปกติ ซึ่งนั่นเป็นสัญญาณว่า RAM ไม่พอและควรอัปเกรด ไม่ใช่ปัญหาของ Swap เอง

ตั้ง Swap บน VPS แล้วต้อง Reboot ไหม?

ไม่ต้อง การใช้ swapon เปิด Swap ได้ทันทีโดยไม่ต้อง Reboot และการเพิ่มบรรทัดใน /etc/fstab เป็นเพียงการทำให้ Swap กลับมาเองหลัง Reboot ครั้งถัดไป ระบบจึงไม่มี Downtime ระหว่างตั้งค่า

VPS สเปคเล็กก็รันเว็บได้อย่างมั่นใจ

AsiaGB VPS เริ่มต้น 500 บาท/เดือน บน SSD รองรับ Ubuntu 20.04–24.04 พร้อม Root Access เต็มรูปแบบ ตั้งค่า Swap ได้ทันที

สั่ง VPS เลย

ดูแพ็กเกจ VPS ไทย ราคาถูกทั้งหมด →