CH-J Server Managerการจัดการเซิร์ฟเวอร์ผ่าน SSH
เมนู
คู่มือและบทความทั้งหมด →

วิธีอ่านค่า RAM แคช และ swap บนเซิร์ฟเวอร์ Linux

ความหมายของคอลัมน์ใน free เหตุใดการใช้หน่วยความจำสูงจึงมักไม่เป็นปัญหา และสัญญาณใดบ่งชี้ว่าหน่วยความจำไม่พอจริง ๆ

อ่านค่า available แทน free

Linux ใช้หน่วยความจำที่ยังไม่ได้ใช้งานเป็นแคชดิสก์ ดังนั้นค่า free ต่ำบนเซิร์ฟเวอร์ที่ทำงานปกติจึงเป็นเรื่องธรรมดา คอลัมน์ available คือค่าที่เคอร์เนลประมาณว่ามีหน่วยความจำเท่าใดให้งานใหม่ใช้ได้โดยไม่ต้องย้ายหน้าไปยัง swap นี่คือตัวเลขที่ควรติดตาม วิธีคำนวณ used ที่แน่นอนขึ้นกับรุ่นของเครื่องมือ จึงไม่ควรนำไปเปรียบเทียบระหว่างระบบที่ต่างกัน

free -h
grep -E 'MemAvailable|Shmem:|SReclaimable' /proc/meminfo

แคชส่วนใดคืนหน่วยความจำได้และส่วนใดคืนไม่ได้

แคชหน้าหน่วยความจำมักคืนพื้นที่ได้เมื่อแอปพลิเคชันต้องการหน่วยความจำ หน่วยความจำใช้ร่วมและ tmpfs (Shmem) ก็ปรากฏในแคชด้วย แต่ไม่สามารถทิ้งได้ทันที เพราะเก็บข้อมูลที่ไม่มีสำเนาบนดิสก์ ดังนั้นแคชขนาดใหญ่ที่มี available ต่ำจึงมักหมายถึง tmpfs หรือส่วนของหน่วยความจำใช้ร่วมที่มีขนาดใหญ่

df -h -t tmpfs
sudo slabtop -o | head -15

มีการใช้ swap ไม่ได้หมายความว่ามีปัญหาเสมอไป

เซิร์ฟเวอร์อาจเก็บหน้าหน่วยความจำที่ไม่ค่อยได้ใช้ไว้ใน swap หลายสัปดาห์โดยไม่เกิดผลเสีย สิ่งที่ส่งผลเสียคือการย้ายไปมาตลอดเวลา ให้ดูคอลัมน์ si และ so ใน vmstat หากค่าสูงกว่าศูนย์อย่างต่อเนื่อง แสดงว่าระบบกำลังย้ายหน้าเข้าออก swap อยู่ ซึ่งเป็นสัญญาณว่าหน่วยความจำไม่พอจริง ๆ

swapon --show
vmstat 1 5

หาว่าอะไรใช้หน่วยความจำอยู่

เรียงกระบวนการตามหน่วยความจำที่อยู่ใน RAM จริง RSS นับหน้าหน่วยความจำที่ใช้ร่วมกันระหว่างกระบวนการไว้ในแต่ละกระบวนการ จึงนำค่าของหลายกระบวนการมาบวกตรง ๆ ไม่ได้ เครื่องมือที่มี PSS เช่น smem ให้ผลรวมที่สะท้อนการใช้จริงได้ดีกว่า หากติดตั้งไว้แล้ว

ps -eo pid,user,rss,comm --sort=-rss | head -15

สังเกตภาวะหน่วยความจำไม่พอจริง

สัญญาณคือ available ต่ำ การย้ายหน้าเข้าออก swap อย่างต่อเนื่อง และกระบวนการถูกยุติโดย out-of-memory killer ให้ตรวจบันทึกของเคอร์เนล อย่ารัน drop_caches เพื่อให้ตัวเลขดูดีขึ้น เพราะทำให้เซิร์ฟเวอร์ต้องอ่านจากดิสก์ใหม่เท่านั้น และไม่ได้แก้ปัญหาใด ๆ

sudo journalctl -k --no-pager | grep -iE 'out of memory|oom-kill'

หน่วยความจำใน CH-J Server Manager

System Monitor อ่านค่าเหล่านี้ผ่าน SSH บน Linux จะกำหนด used เป็น MemTotal − MemFree − Buffers − Cached − SReclaimable และใช้ค่าประมาณจากเคอร์เนลสำหรับ available หน่วยความจำใช้ร่วมเป็นส่วนหนึ่งของ Cached และคืนพื้นที่ไม่ได้ ส่วนหมวดหมู่ในแถบไม่ซ้อนทับกัน เนื่องจากสูตรต่างจาก free บางรุ่น ตัวเลขจึงอาจไม่ตรงกันทั้งหมด นอกจากนี้ยังแสดง swap พร้อมประวัติการใช้งานด้วย ZFS ARC ไม่ได้ถูกแยกออกมาต่างหาก ดังนั้นบนโฮสต์ ZFS จึงนับเป็นหน่วยความจำที่ใช้แล้ว

เอกสารโดยละเอียด

man: free →

man: proc_meminfo →

การปลดล็อกด้วยไบโอเมตริกและความปลอดภัย →