เช็ค Cached แล้วหรือยัง? ปัญหายอดฮิตที่ทำให้ Linux ช้าลง

Sethavoot Rerksuriyapant/ January 25, 2019/ FAQ/ 0 comments

ทำไมจู่ๆ server ของเราถึงช้า?  ความคิดเหล่านี้จะเกิดขึ้นทันทีเมื่อ server ของเราจู่ๆก็เกิดอาการหน่วงๆทำงานผิดปกติ ใครจะไปรู้ว่าสาเหตุสำคัญอีกหนึ่งสาเหตุ ที่มักจะพบกันบ่อยๆเมื่อเกิดปัญหา server ช้า นั่นก็คือ “Cached” บนระบบ linux ของเรานั่นแหละครับ ดังนั้น ผมจึงขออนุญาตหยิบยกประเด็นนี้มาพูดถึง และอธิบายถึงสาเหตุ รวมไปถึงวิธีการแก้ปัญหากันครับ

อย่างที่ทุกคนรู้กันครับว่า linux server นั้น จะมีการใช้งาน performance ที่ต่ำมากว่า OS อื่น ซึ่งในส่วนนี้เราอาจใช้แค่ RAM : 1 GB ก็สามารถใช้งานได้ตามปกติแล้ว (command mode นะครับ) แต่บางทีเราก็จะพบว่า server มีอาการช้าๆ หรือ เกิดหน่วงขึ้นเมื่อมีการเรียกใช้ command แต่พอเรา restart เครื่อง อาการเหล่านี้ดันหายไปครับ ….หากพบว่าอาการที่เจอ มีลักษณะเป็นแบบนี้ นั่นบ่งบอกได้ว่า RAM มีการถูกใช้งานเยอะ แล้วเกิดการเก็บ cached เอาไว้ 


“What is cached ?” 

คือความจำประเภทนึงใน OS ที่จะเก็บการทำงานที่มีการใช้งานบ่อยๆ เอาไว้ เพื่อเวลามีการใช้งานในรูปแบบเดิมจะสามารถทำงานได้เร็วยิ่งขึ้น

อ้าว!? แล้วทำไม cached ถึงทำให้ช้าละ มันควรทำให้เร็วขึ้นสิ

นั่นก็เพราะว่า การที่เครื่องจะทำงานได้อย่าง smooth นั้น ปกติมันก็ต้องใช้ RAM ในการทำงานครับ แต่ RAM ที่มีดันถูกใช้เก็บ cached ไปหมดแล้ว จนทำให้เครื่องไม่มี RAM เหลือเพียงพอต่อการใช้งานนั่นเองครับผม


ประเภทของ Cache

Clean cache & Dirty cache

  • Clean cache คือ  ความจำที่มีการถูกเรียกใช้งานบ่อย หรือเราใช้เป็นประจำ ทำให้เครื่องทำงานได้เร็วยิ่งขึ้น
  • Dirty cache คือ ความจำที่เคยถูกเรียกใช้งาน และไม่ได้มีการใช้งานสม่ำเสมอ หรือไม่ได้ใช้งานอีกแล้ว

อาการที่บ่งบอกว่าRAM ไม่เพียงพอต่อการใช้งาน

  1. เมื่อ SSH เข้าเครื่อง แล้วเกิดอาการค้าง หรือ เข้าไม่ได้ชั่วขณะ
  2. เครื่องมีอาการทำงานช้า หรือ อาการหน่วงๆ
  3. ใช้ command พื้นฐานไม่ได้ เช่น top แล้วค้าง
  4. ถ้ามีการใช้งานในรูปแบบ web ตัว website จะใช้งานได้ช้ากว่าปกติ

วิธีตรวจสอบการใช้งาน RAM

พิมพ์คำสั่งใน command line

free -h

  • กรอบสีแดง – > แสดงค่าการใช้งานของ RAM หรือ Memory
  • กรอบสีฟ้า – > แสดงค่าการใช้งานของ disk ที่มาทำงานแทน RAM

อธิบายค่าของแต่ละ column

  • total : แสดงค่าที่มีทั้งหมด     (total= used+free+buff/cache)
  • used : แสดงค่าที่ถูกใช้งานทั้งหมด
  • free : แสดงค่าที่ไม่ถูกใช้งาน หรือยังไม่ถูกใช้
  • shared : แสดงค่าที่ถูกใช้งานแทน disk
  • buff/cache : แสดงค่าที่ถูกใช้งานโดย buffer และ cache
  • available : ค่าเริ่มต้นที่ถูกคาดการณ์ เมื่อapplicationนั้นไม่เคยถูกใช้งานมาก่อน

หากต้องการแปลงหน่วย หรือ รายละเอียดเพิ่มเติม สามารถใช้ command ด้านล่างเพื่อเข้าใจได้ง่ายขึ้น

free –help

วิธีแก้ไขปัญหา มี 2 วิธีหลักๆ

1.หากต้องการclear ทุก service แนะนำให้ restart เครื่อง

2.หากไม่สามารถ restart เครื่องได้ก็สามารถทำได้ตามด้านล่าง

  • ต้องกำหนดตัวเข้า root ก่อน โดยใช้คำสั่ง

sudo -s หรือ sudo su

  • จากนั้นใช้คำสั่ง clear cache จะมี 3 รูปแบบ เลือกใช้อันใดอันนึง

Pagecache คือ หน่วยความจำที่ถูกบันทึกเมื่อมีการเรียกไฟล์ ระหว่าง RAM กับ บล็อกบนดิสก์
Dentries คือ หน่วยความจำที่เก็บข้อมูลโครงสร้างที่แสดงถึง Directory ไฟล์
Inodes คือ หน่วยความจำของโครงสร้างข้อมูลที่แสดงถึงไฟล์                                        

สำหรับ Pagecache: (Recommends)

sync; echo 1 > /proc/sys/vm/drop_caches

สำหรับ dentries and inodes:

sync; echo 2 > /proc/sys/vm/drop_caches

สำหรับ pagecache, dentries, and inodes: (not recommends)***

sync; echo 3 > /proc/sys/vm/drop_caches

***เหมาะสำหรับคนที่เข้าใจโครงสร้างของ pagecache, dentries, and inodes นี้เป็นอย่างดี


อธิบายเกี่ยวกับ command ที่ใช้ 

  • sync : มีหน้าที่เปลี่ยนclan cache  ให้กลายเป็น dirty cache
  • command ” ; ” :มีหน้าที่แยกcommand แต่จะทำ run command แรกให้เสร็จก่อนถึงจะทำcommand ต่อไป
  • echo  <num>:  มีหน้าที่แสดงผลตามหมายเลข
  • drop_caches : มีหน้าที่ทิ้ง clean cache ให้ RAM ได้มีพื้นที่มากขึ้น


เมื่อใช้คำสั่งเสร็จแล้ว ลองใช้ command ตรวจสอบก่อนนะครับ เพื่อที่เราเองจะได้เช็คว่าลบไปแล้วมันยังช้ารึเปล่า ถ้าปรากฏว่ายังช้าอยู่ ให้ลองเช็คว่า service ไหนที่มีการเรียกใช้ RAM เยอะที่สุด โดยใช้คำสั่งตาม command ข้างล่างได้เลยครับ

top

 

หลังใช้คำสั่ง “top” command กด”shift+m” เราก็จะเห็น service ที่มีการเรียกใช้ RAM มากสุด หรือ น้อยที่สุด นั่นเองครับผม

หากพบว่าทำหมดทุกขั้นตอนนี้แล้ว แต่ server ยังช้าอยู่ ผมขอแนะนำให้พิจารณาเพิ่ม RAM ดูนะครับ เพราะการใช้วิธีนี้จะตอบโจทย์ปัญหาที่เราเจอมากที่สุดและง่ายที่สุดด้วย หรืออาจจะเลือกใช้ Disk มาทำ เป็น RAM ก็ได้ครับ

Src: https://stackoverflow.com/questions/29870068/what-are-pagecache-dentries-inodes, https://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/

ติดตามข่าวสารใหม่ๆ หรือข้อมูลน่ารู้อีกมากมายได้ที่

  OpenLandscape Fanpage | https://www.facebook.com/openlandscapecloud/
  OpenLandscape Twitter | https://www.twitter.com/olscloud/
 OpenLandscape Cloud | https://openlandscape.cloud/
 OpenLandscape Blog | https://blog.openlandscape.cloud/

 

Simple is the best but everything can change for a reason.

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*