อ่านค่า 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 จึงนับเป็นหน่วยความจำที่ใช้แล้ว