Digital Ocean กับการเพิ่ม Swap file ให้กับ Ubuntu Server EP7 นี้เป็นการอธิบาย เกี่ยวกับขั้นตอนของการเพิ่ม Swap เพราะ DO ไม่ได้ทำ Swap มาให้ ดังนั้นเพื่อป้องกัน Ram ของ Server เต็ม หรือ ไม่พอใช้งาน เราต้องทำ Swap เพื่อไว้กรณี Ram ของ Server เต็ม หรือ ไม่พอใช้งาน โดยใน EP ที่ 7 นี้ จะแนะนำการทำ Swap ให้กับ Ubuntu Server โดยจะอธิบายรายละเอียดในบทความนี้
จากบทความที่แล้วทางอินดี้ได้อธิบายถึง DO กับ การเพิ่ม Swap ให้กับ CentOS EP6 ซึ่งสามารถเข้าไปอ่านบทความเกี่ยวกับการ Add Swap ให้กับ CentOS ใน คลิกที่นี่ DigitalOcean Plan การเพิ่ม Swap ให้กับ CentOS EP6 และ ในบทความนี้ทางอินดี้จะอธิบายถึงการเพิ่ม Swap ให้กับ Ubuntu Server กัน
Digital Ocean 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 มาช่วยประมวลผล
Digital Ocean ทำไมต้องเพิ่ม Swap
- เนื่องจาก Do ในตัว Droplets ของ DO จะไม่มี Swap มาให้
- เพื่อช่วย Ram ประมวลผลในกรณีที่ Ram ของ Server เต็ม
- ลดอาการค้างของ Web Server ได้ เพราะเราไม่สามารถไปใช้งาน เครื่อง VM ที่ Ram เยอะๆได้
- ลดปัญหา Out of memory error ในหน้า web site ของเรา
ขั้นตอนการ Add Swap ให้กับ Ubuntu Server บน Digital Ocean
ก่อนทำการ Add Swap แนะนำว่าให้เริ่มทำตั้งแต่สร้าง Droplets ใหม่ๆ เลย ไม่แนะนำให้ทำกับ Server ที่มีข้อมูลอยู่แล้ว เพราะข้อมูลอาจะสูญหายได้ หรือ ควร Backup ข้อมูลไว้ก่อน ก่อนที่จะทำการเพิ่ม Swap ให้กับ Server
Swap ที่ดีอ้างอิงจากหลายแหล่ง Guru ด้าน Linux บอกว่าควรสร้าง Swap ไม่เกิน 2 เท่าของ Memory
Step 1 ตรวจสอบรายละเอียดของระบบ Swap
- ใช้ Putty หรือ SSH Access ไปยัง Ubuntu ของเรา หลังจาก Login เสร็จแล้ว ทำการ run root command ด้วย
sudo su
- ทำการติดตั้ง Wget และ nano ทีละคำสั่ง
apt-get install wget
apt-get 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 ของ Ubuntu Server
df -h
Output:
Filesystem Size Used Avail Use% Mounted on
udev 978M 0 978M 0% /dev
tmpfs 199M 908K 198M 1% /run
/dev/vda1 49G 1.3G 48G 3% /
tmpfs 994M 0 994M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 30M 30M 0 100% /snap/snapd/8790
/dev/loop1 56M 56M 0 100% /snap/core18/1885
/dev/loop2 71M 71M 0 100% /snap/lxd/16922
tmpfs 199M 0 199M 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 ลองเอาไปปรับใช้ตามความเหมาะสม
ขอบคุณข้อมูลจาก DO Communication