หนึ่งในปัญหาที่ผู้ใช้ 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 GB | 2 GB | เว็บ + PHP เล็ก |
| 2 GB | 2–4 GB | WordPress + MySQL |
| 4 GB | 2–4 GB | Node.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 ยังไม่เต็ม:
0— ใช้ Swap เฉพาะเมื่อจำเป็นจริง ๆ (RAM เกือบเต็ม)10— แนะนำสำหรับ Server / VPS60— ค่า Default ของ Ubuntu (เหมาะ Desktop)100— ย้าย Process ไป Swap อย่างก้าวร้าว
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 MB | 1–2 GB (2–4× RAM) | 10 | เว็บนิ่ง ๆ + PHP เล็ก |
| 1 GB | 2 GB (2× RAM) | 10 | WordPress 1 เว็บ |
| 2 GB | 2–4 GB (1–2× RAM) | 10 | WordPress + MySQL หลายเว็บ |
| 4 GB | 2–4 GB (0.5–1× RAM) | 10 | Node.js / Python / E-Commerce |
| 8 GB | 2 GB (เผื่อ buffer) | 10 | App หนัก / Container |
| 16 GB ขึ้นไป | 0–2 GB (เกือบไม่จำเป็น) | 1–10 | Database 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 เป็นทางออกหลัก ควรเข้าใจข้อจำกัดเหล่านี้:
- SSD Wear (การสึกหรอของ SSD): Swap คือการเขียนข้อมูลลง SSD ซ้ำ ๆ ซึ่งกิน Write Cycle ที่มีจำกัด การ Swap หนักตลอดเวลาในระยะยาวเร่งให้ SSD เสื่อมเร็วขึ้น ตั้ง Swappiness ต่ำ (10) เพื่อลดความถี่การเขียน
- Swap ไม่ใช่ตัวแทน RAM: Swap ช้ากว่า RAM 10–100 เท่า ถ้าเครื่องต้องใช้ Swap ตลอดเวลา แปลว่า RAM ไม่พอจริง ๆ ทางแก้ที่ถูกคืออัปเกรด RAM ไม่ใช่เพิ่ม Swap ให้ใหญ่ขึ้นเรื่อย ๆ
- ระวัง Swap Thrashing: ถ้าระบบ Swap เข้า-ออกถี่มาก (Thrashing) CPU จะหมดเวลาไปกับการย้ายข้อมูลแทนการประมวลผลจริง เว็บจะช้าลงอย่างเห็นได้ชัด — ติดตามด้วย
vmstat 1ดูคอลัมน์si/soถ้าตัวเลขสูงตลอดคือสัญญาณอันตราย - การปิด Swap ต้องระวัง: ถ้า Swap ถูกใช้งานอยู่มาก การรัน
swapoffจะช้าหรือค้าง เพราะระบบต้องย้ายข้อมูลกลับ RAM ทั้งหมดก่อน ควรปิดเฉพาะตอน RAM ว่างพอ - VPS บาง Provider จำกัด: VPS แบบ OpenVZ/LXC บางเจ้าไม่อนุญาตให้สร้าง Swap file หรือมี Swap จำกัดที่ Host กำหนด ตรวจสอบกับผู้ให้บริการก่อน — AsiaGB VPS เป็น KVM รองรับการสร้าง 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 เลย