Server DigitalOcean กับขั้นตอนการ Add Swap บน Debian 10 เพื่อใช้งาน Swap เหตุผลในการทำ Swap คือ ใน Cloud ของ Do จะไม่มี Swap มาเป็น Default ดังนั้นเราต้องทำการ Add Swap ก่อนเพื่อป้องกัน Memory ของ Web Server ของเราเต็ม หรือ ไม่พอใช้ในบางกรณี
จากบทความที่แล้วได้เขียนถึงเครื่องมือ Control Panel ของทาง DO ว่าใช้งานอะไรได้บ้าง อ่านเพิ่มเติมได้ที่ DO Host เรียนรู้เบื้องต้น EP4 โดยหลังจากที่เราสร้าง Linux Droplets บน DO เรียบร้อยแล้ว สิ่งที่ต้องทำเพิ่มคือการ Add Swap สำหรับใช้พื้นที่ Harddisk มาช่วย Ram ในการประมวลผล และ รัน Web Server ของเราไม่ให้ล่วง
Server DigitalOcean 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 Server DigitalOcean
- เนื่องจาก Do ในตัว Droplets ของ DO จะไม่มี Swap มาให้
- เพื่อช่วย Ram ประมวลผลในกรณีที่ Ram ของ Server เต็ม
- ลดอาการค้างของ Web Server ได้ เพราะเราไม่สามารถไปใช้งาน เครื่อง VM ที่ Ram เยอะๆได้
- ลดปัญหา Out of memory error ในหน้า web site ของเรา
Server DigitalOcean ขั้นตอนการ Add Swap ให้กับ Debian 10
ก่อนทำการ Add Swap แนะนำว่าให้เริ่มทำตั้งแต่สร้าง Droplets ใหม่ๆ เลย ไม่แนะนำให้ทำกับ Server ที่มีข้อมูลอยู่แล้ว เพราะข้อมูลอาจะสูญหายได้ หรือ ควร Backup ข้อมูลไว้ก่อน ก่อนที่จะทำการเพิ่ม Swap ให้กับ Server
Swap ที่ดีอ้างอิงจากหลายแหล่ง Guru ด้าน Linux บอกว่าควรสร้าง Swap ไม่เกิน 2 เท่าของ Memory
Step 1 การตรวจสอบรายละเอียดของ Swap
- SSH Login เข้า Terminal ของ Linux debian และ run root ด้วย Command
Sudo su
- ทำการติดตั้ง Wget และ nano
apt install wget
apt install nano
- รันคำสั่งเพื่อขอดูการ Config ทุก Config ที่เกี่ยวกับ Swap
swapon --show
- ดู Memo ทั้งหมดว่ามีขนาดเท่าไร
free -h
Output:
total used free shared buff/cache available
Mem: 2.0Gi 41Mi 1.8Gi 2.0Mi 91Mi 1.8Gi
Swap: 0B 0B 0B
- จาก output ของการ run command ข้างบน คือ Droplets ของ DO ไม่ได้ทำการสร้าง Swap ให้ดังนั้น step ต่อไปคือการสร้าง Swap
Step 2 ทำการตรวจสอบพื้นที่ว่างของ Hard Disk เพื่อจะเอามาทำ Swap
จริงๆการเช่า DO Plan 5$ หรือ 10$ มีพื้นที่เหลือพอให้ทำ Swap เพระ Do ให้พื้นที่เยอะ แต่เพื่อเป็นการเรียนรู้ และ เข้าใจการทำงาน ลองมาทำกันดู
- พิมพ์คำสั่งของ Linux เพื่อขอดูพื้นที่ที่เหลือ
df -h
Output:
Filesystem Size Used Avail Use% Mounted on
udev 991M 0 991M 0% /dev
tmpfs 200M 2.9M 197M 2% /run
/dev/vda1 50G 974M 47G 3% /
tmpfs 999M 0 999M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 999M 0 999M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/0
- จากผลที่ได้คือมีพื้นที่เหลือพอ ซึ่งเราจะเอาในส่วนของ /dev/vda1 มาใช้งานเป็น Swap file
Step 3 ทำการสร้าง Swap File
การสร้าง Swap ไฟล์ที่ดีคือไม่เกิน 2 เท่า ของขนาด Ram ที่มี ในเครื่องตัวอย่างคือใช้ Ram 2G ดังนั้นจะสร้าง Swap 2G ด้วย
- รัน command เพื่อสร้าง Swap file ขนาด 2G
sudo fallocate -l 2G /swapfile
- ยืนยันการเปลี่ยน Swap file และ ผลที่ได้ตาม output
ls -lh /swapfile
Output:
-rw-r--r-- 1 root root 2.0G Sep 4 12:51 /swapfile
Step 4 สร้าง Swap File
- กำหนด Permisson ของ Swap file
sudo chmod 600 /swapfile
ยืนยัน Swap file permission
ls -lh /swapfile
output:
-rw------- 1 root root 1.0G May 29 17:34 /swapfile
ดำเนินการสร้าง Swap file ด้วย คำสั่ง และ ผลลัพท์ที่ได้
sudo mkswap /swapfile
output:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=dc7b1207-a121-43da-bf00-05a63968d8a6
- หลังจากสร้าง Swap file เราจะรันเพื่อ enable swap file และ ผลที่ได้
sudo swapon /swapfile
- ยืนยันว่า Swap file พร้อมใช้งาน และ ผลลัพท์ที่ได้
sudo swapon --show
Output:
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
- เราสามารถใช้คำสั่งดู memory เพื่อใช้ดู Swap file และ memory ได้ และ ผลลัพท์ที่ได้
free -h
output:
total used free shared buff/cache available
Mem: 2.0Gi 45Mi 1.7Gi 2.0Mi 232Mi 1.8Gi
Swap: 2.0Gi 0B 2.0Gi
- จะสังเกตุได้ว่ามี Swap file เพิ่มขึ้นมา 2G แล้ว ก็เข้าสู่ขั้นตอนต่อไป
Step 5 ทำ Swap file ให้เป็น Permanent
หลังจากสร้าง Swap file เรียบร้อยตาม step มาแล้วต่อไปก็จะเป็นการทำ Swap file ให้เป็น Permanent โดยเราจะไปทำกันที่ /etc/fstab
- ทำการ Backup /etc/fstab เพื่อผิดพลาด
sudo cp /etc/fstab /etc/fstab.bak
- Add Swap file ลองไปที่บรรทัดสุดท้ายของ /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Step 6 ทำการ Tuning Swap File
- ดำเนินการ run คำสั่ง เพื่อทำการ tuning swap และ output ที่ได้
cat /proc/sys/vm/swappiness
Output:
60
- สำหรับ Linux desktop ค่า 60 นั้นดี แต่สำหรับ Server แนะนำให้เข้าใกล้ 0 มากที่สุด ในที่นี้แนะนำคือ 10
sudo sysctl vm.swappiness=10
Output:
vm.swappiness = 10
- Swap file ที่เราต้องการสร้างต้องทำเป็น Persistent ดังนั้นที่เรา set มาเราไม่ต้องการให้หายไปหลังจาก Reboot และจะให้ค่านี้เป็น อัตโนมัติทุกครั้ง เราจะไปแก้ไขที่ /etc/sysctl.conf
sudo nano /etc/sysctl.conf
- ให้ใช้ลูกศรเลื่อนลง มาเรื่อยๆ จนบรรทัดสุดท้ายของไฟล์ /etc/sysctl/conf และใส่ค่า
vm.swappiness=10
- กดปุ่ม Ctrl + X เพื่อออกจากหน้า /etc/sysctl และ กด Y เพื่อ Save
- ปรับแต่ง Cache Pressure โดยขั้นตอนแรกเป็นการ run command เพื่อดูข้อมูลค่าของ vfs_cache_pressure ว่าเป็นเท่าไร
cat /proc/sys/vm/vfs_cache_pressure
Output:
100
- ทำการปรับแต่ง Cache Pressure ให้เหลือ 50
sudo sysctl vm.vfs_cache_pressure=50
Output:
vm.vfs_cache_pressure = 50
- ทำการบันทึกค่าของ Cache pressure ที่ไฟล์ /etc/sysctl/conf
sudo nano /etc/sysctl.conf
- เลือนลงมาบรรทัดสุดท้าย และ เพิ่มคำว่า
vm.vfs_cache_pressure=50
- ทำการกดปุ่ม Ctrl X และ กด Y เพื่อ save
- ขอบพระคุณข้อมูลจาก Community ของ DO
สรุป
การ add swap file เป็นการช่วยลดภาระของ RAM ในกรณีที่ ram ของ server ไม่พอใช้งาน โดย process บางส่วนจะถูกนำมาเขียนบน swap file แทนหาก ram server เต็ม และการ Add Swap file ที่ดีคือ ไม่เกิน 2 เท่าของแรม จากตัวอย่างเป็นการ Add 1 เท่าของ ram ลองเอาไปปรับใช้ตามความเหมาะสม