สร้างและใช้งาน Swap บน Ubuntu Linux

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