Swap คือ พื้นที่ส่วนหนึ่งของฮาดดิสที่ถูกตั้งค่าไว้ให้เป็นหน่วยความจำ(RAM) สำรองบนเครื่อง Linux ซึ่งอาจจะเป็นไฟล์ หรือเป็นพาร์ติชั่นก็ได้ โดยหากมีการตั้งค่าพื้นที่ Swap ไว้ ระบบจะสามารถนำข้อมูลที่ไม่ค่อยได้ใช้งานที่อยู่ในแรม ไปเก็บไว้ใน Swap เพื่อทำให้มีพื้นที่ในแรมเหลือมากขึ้น หรือหากมีการใช้งานจนแรมเต็มแล้ว ระบบก็จะสามารถนำข้อมูลส่วนเกินไปเขียนบน Swap แทนแรมได้ ทำให้เครื่องสามารถทำงานต่อได้ ไม่เกินการค้างหรือหยุดชะงัก
อย่างไรก็ดี เมื่อ Swap นั้นจริงๆก็คือพื้นที่บนฮาร์ดไดร์ฟ ก็จะมีการเขียนอ่านที่ช้า ไม่รวดเร็วเหมือนแรม เราจึงไม่สามารถใช้ Swap แทนแรมได้ ดังนั้นในเบื้องต้นควรดูความต้องการใช้งาน และตั้งค่าหรือเพิ่มแรมให้เพียงพอต่อความต้องการใช้งานก่อน
กรณีใช้งาน AWS EC2 โดยปกติเมื่อเราสร้าง Ubuntu instance บน AWS EC2 จะไม่มีการตั้งค่า Swap มาให้ เช่นนี้ หากมีการใช้งานเครื่องจนแรมเต็ม เครื่องก็จะค้าง ไม่สามารถทำงานต่อได้ โพสนี้จึงจะมาอธิบายวิธีการสร้าง Swap file ตามขั้นตอนดังต่อไปนี้
Step 1: สร้าง Swap File การสร้าง Swap space นั้นสามารถสร้างเป็นไฟล์ก็ได้ หรือเป็นพาร์ติชั่นหนึ่งของฮาร์ดไดรฟ์ก็ได้ โดยในที่นี้เราจะใช้วิธีสร้าง Swap file โดย
ตรวจสอบก่อนว่ามี Swap อยู่แล้วหรือยัง ด้วยคำสั่ง swapon summery โดยหากยังไม่เคยมี Swap ก็จะไม่มีข้อมูลใดๆปรากฎขึ้นมา
sudo swapon -s
เริ่มสร้างไฟล์ Swap โดยต้องกำหนดขนาดของไฟล์ ซึ่งโดยปกติแล้วมีหลักการคร่าวๆดังนี้
- หากมีแรมน้อยกว่า 2 GB ควรสร้าง Swap ขนาด 2 เท่าของขนาดแรม
- หากมีแรมขนาด 2-8 GB ควรสร้าง Swap ขนาดเท่าแรม
- หากมีแรมมากกว่า 8 GB ควรสร้าง Swap ขนาดอย่างน้อย 4 GB
*ขนาดเบื้องต้นเป็นเพียงการแนะนำเท่านั้น หากมีพื้นที่ดิสต์ไม่เพียงพอ สามารถตั้งน้อยกว่านั้นได้
ดูขนาดของ RAM ในปัจจุบัน
สามารถดูขนาดของแรมในเครื่องได้โดยใช้คำสั่ง free -m
โดยขนาดของแรมจะอยู่ในหัวข้อ Mem: total
สร้างไฟล์ และกำหนดให้เป็น Swap:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
หากสำเร็จจะขึ้นรายละเอียดเกี่ยวกับ Swap นี้ ดังภาพ
จากนั้นเปิดใช้งาน Swap นี้โดยใช้คำสั่ง
sudo swapon /swapfile
เมื่อเปิดใช้งานแล้ว สามารถตรวจสอบได้โดยใช้คำสั่ง swapon -s อีกครั้ง
sudo swapon -s
# หากเปิดใช้งานเรียบร้อยจะได้ผลลัพท์ เช่น
Filename Type Size Used Priority
/swapfile file 4194300 0 -2
เมื่อถึงขั้นนี้ หากเรารันคำสั่ง free -m
เพื่อดูข้อมูลแรมอีกครั้ง จะเห็นข้อมูล Swap เพิ่มมาด้วย
free -m
# แสดงข้อมูล Ram และ Swap เช่น
total used free shared buff/cache available
Mem: 3933 1218 1520 87 1195 2395
Swap: 4095 0 4095
Step 2: ตั้งให้ Swap นี้เป็น Swap ถาวร คือให้ใช้งานทุกครั้งเมื่อรีสตาร์ทเครื่อง โดยแก้ไขไฟล์ fstab
sudo vim /etc/fstab
เพิ่มบรรทัดใหม่ต่อท้ายไฟล์ และบันทึกไฟล์
/swapfile swap swap defaults 0 0
Step 3: แก้ไขค่า swappiness หรือการบอกระบบว่าให้สลับใช้งาน Swap บ่อยแค่ไหน โดยสามารถตั้งค่าได้ตั้งแต่ 0-100 โดยค่ายิ่งมากระบบก็จะยิ่งพยายามใช้ Swap มาก โดยค่าที่แนะนำสำหรับเครื่อง Linux ที่ใช้งานปกติคือ 60 และน้อยกว่านั้นสำหรับเซิฟเวอร์ คือ 10 (ตั้งค่าน้อยเนื่องจากเราไม่ต้องการให้เซิฟเวอร์ทำการ Swap บ่อยเกินไป เพราะ Swap ทำงานได้ช้ากว่าแรม)
สามารถตั้งค่า swappiness ได้โดยแก้ไขไฟล์ /etc/sysctl.conf
sudo vi /etc/sysctl.conf
เพิ่มการตั้งค่า swappinessไปยังบรรทัดล่างสุดของไฟล์
vm.swappiness=10
จากนั้นรีโหลด sysctl ด้วยคำสั่ง
sudo sysctl -p
เท่านี้ก็เป็นอันเสร็จสิ้นการเพิ่มและเปิดใช้งาน Swap ใน Ubuntu Linux