DigitalOcean Plan กับบทความการเพิ่ม Swap ให้กับ CentOS เพราะ DigitalOcean จะไม่ Add Swap file มาให้เป็นค่าเริ่มต้น ดังนั้น เพื่อกัน Web ของเรา Memory ไม่พอใช้ ทางอินดี้ จะแนะนำ ขั้นตอนการ Add swap file เพื่อป้องกันการเต็ม หรือ Memory ไม่พอจน Web hosting หรือ VPS ของเรา Downtime
จากบทความที่แล้วอินดี้ได้เขียนเกี่ยวกับการเพิ่ม Swap ใน Debian 10 ซึ่งสามารถเข้าไปอ่านได้ที่บทความ Server DigitalOcean การ Add Swap บน Debian 10 EP5 และ มาใน EP6 นี้จะมาแนะนำการ Add Swap สำหรับ CentOS กันบ้าง ซึ่งขันตอนก็แทบไม่ต่างกับการ add swap บน Debian เลย
DigitalOcean Plan Swap คืออะไร
Swap คือ ไฟล์ประเภทหนึ่งที่ทำหน้าที่ เสมือนหน่วยความจำ หรือ Ram ที่เรารู้จัก ดังนั้นหากเราใช้งาน Web Server บน DO และมีงบประมาณจำกัด เช่น เราใช้ Plan ที่มี Ram 2G เอาง่ายๆว่าหากวันหนึ่งมีคนเข้าใช้งาน Website เยอะ หรือ มี Process ที่ต้องใช้งานบน Server แต่ผลคือ Ram เต็ม ซึ่งหาก Ram เต็ม Process หรือ เครื่อง Web Server ของเรา อาจจะ Down ได้ ดังนั้นการมี Swap มาช่วย Ram ประมวลผลจึงจำเป็นอย่างมาก เพราะเมื่อ Ram ถูกใช้งานจนหมด เพื่อลดอาการค้าง หรือ Hang ของเครื่อง ระบบ Linux จะนำ Process บางส่วนมารันบน Swap ที่เป็น Harddisk
ซึ่งสรุปง่ายๆก้คือ Swap ช่วย Ram ในการประมวลผล หาก Ram ใน Server ใกล้เต็ม ระบบ Linux นำ Swap มาช่วยประมวลผล
ทำไมต้องเพิ่ม Swap DigitalOcean Plan
- เนื่องจาก Do ในตัว Droplets ของ DO จะไม่มี Swap มาให้
- เพื่อช่วย Ram ประมวลผลในกรณีที่ Ram ของ Server เต็ม
- ลดอาการค้างของ Web Server ได้ เพราะเราไม่สามารถไปใช้งาน เครื่อง VM ที่ Ram เยอะๆได้
- ลดปัญหา Out of memory error ในหน้า web site ของเรา
ขั้นตอนการ Add Swap ให้กับ CentOS
ก่อนทำการ Add Swap แนะนำว่าให้เริ่มทำตั้งแต่สร้าง Droplets ใหม่ๆ เลย ไม่แนะนำให้ทำกับ Server ที่มีข้อมูลอยู่แล้ว เพราะข้อมูลอาจะสูญหายได้ หรือ ควร Backup ข้อมูลไว้ก่อน ก่อนที่จะทำการเพิ่ม Swap ให้กับ Server
Swap ที่ดีอ้างอิงจากหลายแหล่ง Guru ด้าน Linux บอกว่าควรสร้าง Swap ไม่เกิน 2 เท่าของ Memory
Step 1 ตรวจสอบรายละเอียดของระบบ Swap DigitalOcean Plan
- ใช้ Putty หรือ SSH Access ไปยัง CentOS ของเรา หลังจาก Login เสร็จแล้ว ทำการ run root command ด้วย
sudo su
- ทำการติดตั้ง Wget และ nano ทีละคำสั่ง
yum install wget
yum install nano
- ดู Config ของทุก Config ที่เกี่ยวกับ Swap
sudo swapon --show
- ดู Memory ด้วย Command ยกตัวอย่างจะมี Ram 2G และ ไม่มี Swap
free -h
Output:
total used free shared buff/cache available
Mem: 1.8Gi 152Mi 1.3Gi 16Mi 370Mi 1.5Gi
Swap: 0B 0B 0B
Step 2 ตรวจสอบพื้นที่ว่างของ SSD Hard disk
- ตรวจสอบพื้นที่ว่างบน SSD ของ CentOS
df -h
Output:
[root@centos-s-1vcpu-2gb-sgp1-01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 898M 0 898M 0% /dev
tmpfs 914M 0 914M 0% /dev/shm
tmpfs 914M 17M 898M 2% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/vda1 50G 1.6G 49G 4% /
tmpfs 183M 0 183M 0% /run/user/0
- จาก output เราจะเอาพื้นที่ /dev/vda1 ซึ่งมีพื้นที่ 50G มาทำ swap
Step 3 ทำการสร้าง Swap file
- จาก Command เป็นการสร้าง Swap ขนาด 2G หากต้องการขนาดมากกว่านี้ สามารถระบุได้เลย ว่าต้องการเท่าไร แต่ไม่ควรเกิน 2 เท่าของ RAM
sudo fallocate -l 2G /swapfile
- ยืนยันการแบ่งพื้นที่มาทำ Swap
ls -lh /swapfile
Output:
-rw-r--r--. 1 root root 2.0G Sep 10 04:13 /swapfile
- เสร็จสิ้นกระบวนการสร้าง Swap
Step 4 เปิดใช้งาน Swap file
- ทำการแก้ไข Permission ของ Swap
sudo chmod 600 /swapfile
- ยืนยันว่า Permission เปลี่ยนเป็น chmod 600
ls -lh /swapfile
Output:
-rw-------. 1 root root 2.0G Sep 10 04:13 /swapfile
- Mark Swap file
sudo mkswap /swapfile
Output:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=1a5f2c83-2d28-4569-9e7b-f73bd7b4cb0c
- หลังจาก mark swap file ก็ทำการ Enable swap file
sudo swapon /swapfile
- ยืนยันว่า Swap พร้อมใช้งาน
sudo swapon --show
Output:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
- ตรวจสอบว่า Swap พร้อมใช้งาน
free -h
Output:
total used free shared buff/cache available
Mem: 1.8Gi 150Mi 1.3Gi 16Mi 371Mi 1.5Gi
Swap: 2.0Gi 0B 2.0Gi
- จาก output จะเห็นได้ว่ามี swap พร้อมใช้งานขนาด 2G
Step 5 เปลี่ยน Swap ให้เป็น Permanent
- ทำการ Backup etc/fstab
sudo cp /etc/fstab /etc/fstab.bak
- Add Swap ไฟล์ไว้ที่สุดท้ายของ etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Step 6 จูนค่า Swap ให้เหมาะกับ Server
- เนื่องจากค่า Swap default ตั้งมาให้เหมาะกับ Desktop ดังนั้นต้องตั้งค่าให้เหมาะกับ server
cat /proc/sys/vm/swappiness
Output:
30
- ตั้งค่าให้เหมาะกับ server คือ 10
sudo sysctl vm.swappiness=10
Output:
vm.swappiness = 10
- ปรับแต่งค่า /etc/sysctl.conf
sudo nano /etc/sysctl.conf
- เลื่อนไปบรรทัดสุดท้ายใส่ค่า และ กด Ctrl+x เพื่อออก และ กด Y เพื่อ Save
vm.swappiness=10
- ปรับแต่งค่า Adjusting the Cache Pressure Setting
cat /proc/sys/vm/vfs_cache_pressure
Output:
100
- ปรับค่าให้เหลือ 50
sudo sysctl vm.vfs_cache_pressure=50
Output:
vm.vfs_cache_pressure = 50
- ปรับค่า sysctl.conf
sudo nano /etc/sysctl.conf
- เลื่อนลงไปบรรทัดสุดท้าย และ ใส่ค่า และ กด Ctrl+x เพื่อออก และ กด Y เพื่อ Save
vm.vfs_cache_pressure=50
สรุป
การ add swap file เป็นการช่วยลดภาระของ RAM ในกรณีที่ ram ของ server ไม่พอใช้งาน โดย process บางส่วนจะถูกนำมาเขียนบน swap file แทนหาก ram server เต็ม และการ Add Swap file ที่ดีคือ ไม่เกิน 2 เท่าของแรม จากตัวอย่างเป็นการ Add 1 เท่าของ ram ลองเอาไปปรับใช้ตามความเหมาะสม
ขอบคุณข้อมูลจาก DigitalOcean