โดยทั่วไป cloud server จะไม่มี swap space ซึ่งเป็น memory เสริมที่อยู่บน disk มาให้ด้วย โดยเวลาเรียกคำสั่ง “top” จะเห็นค่า swap เป็น 0 ในบางครั้ง memory หลักไม่พอ kernel ของ linux ก็จะทำการ “kill” process บางตัวทิ้ง เพื่อให้ OS ไม่ crash ซึ่งการ kill process นี้ kernel จะเป็นผู้เลือกว่าหวยจะไปออกที่ process ใด และอาจส่งผลที่ไม่พึงประสงค์ได้ หาก kill process ที่เราต้องใช้งานทิ้ง
ในบทความนี้เราจะแบ่งบางส่วนของ virtual disk ที่ใช้งานใน cloud server เพื่อสร้าง swap space โดยสมมติว่า OS ที่ใช้งานใน cloud server คือ CentOS 6.x
ขั้นตอนการสร้าง swap space จากพื้นที่บน disk นั้น ทำได้ตามรายการคำสั่งต่อไปนี้ โดยใช้สิทธิของ root
# free -m
# dd if=/dev/zero of=/mnt/swapfile bs=1M count=1024
# chmod 600 /mnt/swapfile
# mkswap /mnt/swapfile
# swapon /mnt/swapfile
คำสั่งแรกเป็นการสร้างไฟล์ /mnt/swapfile ขนาด 1GB หากต้องการพื้นที่สำหรับ swap มากกว่านี้ เช่นเป็น 2GB ก็สามารถเพิ่มค่า count ได้ เช่น count=2048 โดยปกติขนาด swap space ไม่ควรเกิน 2 เท่าของ memory ในระบบ
เพื่อความปลอดภัยเราก็จะเปลี่ยน permission ของไฟล์ดังกล่าวให้ root ทำการอ่านเขียนได้เท่านั้น และบอกระบบว่า ให้ใช้ไฟล์ดังกล่าวเป็น swap space จากนั้นก็เปิดการใช้งาน swap ทันทีโดยคำสั่ง “swapon”
แม้ swap จะใช้งานได้แล้ว แต่ขั้นตอนข้างต้นยังไม่เสร็จสิ้นดี เพราะ swap จะไม่ถูกใช้งานหลังการ reboot จึงต้องมีขั้นตอนเพิ่มเติมอีก 3 ขั้นตอน ดังนี้
# echo '/mnt/swapfile none swap sw 0 0' >> /etc/fstab
# vi /etc/sysctl.conf
# sysctl vm.swappiness=60
บรรทัดแรกเป็นการเพิ่ม swap file เข้าไปใน fstab เพื่อที่ว่าหลังการ reboot ก็จะยังใช้งาน swap นี้อยู่ตลอด
เรายังสามารถตั้งค่า vm.swappiness ได้อีกด้วย ซึ่งค่านี้ปกติอยู่ที่ 60 และสามารถมีค่า 0-100 ยิ่งสูงระบบก็จะยิ่ง swap แบบ aggressive มากขึ้น ยิ่งต่ำ ก็จะยิ่งพยายามไม่ swap ลง disk ดังนั้น เราสามารถปรับค่าได้ตามความเหมาะสม ในกรณีนี้ เราตั้งค่าไว้ที่ 10 ซึ่งเป็นการบอก kernel ว่า ถ้าไม่จำเป็นจริงๆ ก็ไม่ต้อง swap ฯลฯ บรรทัดสุดท้ายเป็นการ activate ค่า swappiness ทันที
ตรวจสอบเพื่อความมั่นใจว่า swap ดังกล่าวถูกเปิดใช้งานเรียบร้อยด้วยคำสั่ง
# swapon -s
Filename Type Size Used Priority
/mnt/swapfile file 1048568 0 -1
เพียงเท่านี้ เราก็จะได้ swap space มาใช้งานกันแบบถาวร