ฉันทราบคำถามนี้ https://stackoverflow.com/questions/41224738/how-to-calculate-system-memory-usage-from-proc-meminfo-like-htop
คำตอบดูเหมือนล้าสมัยเกี่ยวกับการใช้หน่วยความจำ และคำถามนี้ดูซับซ้อนกว่า
htop แน่นอนตอนนี้ไม่คำนวณหน่วยความจำทั้งหมดผ่าน MemTotal - MemFree
อีกต่อไป.
ที่นั่น https://access.redhat.com/solutions/406773 ฉันพบวิธีแก้ปัญหาที่เหมาะสม ตามนั้นก็จะคำนวณผ่าน MemTotal - MemFree - บัฟเฟอร์ - แคช - Slab
แต่นั่นนำไปสู่การใช้หน่วยความจำต่ำเกินไปเมื่อเทียบกับ htop
การใช้หน่วยความจำใน htop ดูเหมือนจะค่อนข้างสัมพันธ์กัน ฟรี -ม
แสดงในเซลล์ เมม:ใช้แล้ว
แต่ถ้าคุณสร้าง ramdisk สิ่งต่าง ๆ จะเปลี่ยนไปมาก:
mkdir mnt
sudo mount -t tmpfs ไม่มี mnt
ซีดี
sudo dd if=/dev/urandom of=test bs=32M status=progress
ด้านบนจะสร้างดิสก์ RAM ขนาด 50 % ของหน่วยความจำที่ติดตั้งและเติม ramdisk นี้
htop แสดงมากกว่าครึ่งหนึ่งของ RAM จริงที่ใช้ไปเล็กน้อย ในกรณีทดสอบ 3.82 GB จาก 7.44 GB ที่ใช้ไป อย่างไรก็ตาม ฟรี -ม
แสดงว่ายังคงใช้เพียง 104 MB เทียบกับ 102 MB ก่อนสร้างและเติมดิสก์ RAM ดังนั้นการใช้ 104 MB นั้นผิดอย่างแน่นอน เนื่องจากครึ่งหนึ่งของหน่วยความจำระบบจริงไม่สามารถใช้งานได้อีกต่อไปเนื่องจากดิสก์ RAM ถูกใช้ไปแล้ว
ใน /proc/meminfo
ขนาดของดิสก์ RAM ดูเหมือนว่าจะรวมอยู่ใน แคช
ดังนั้นสำหรับการคำนวณแคชหน่วยความจำที่ใช้แล้วไม่ควรหักออก
เหตุใด free -m จึงรายงานค่าหน่วยความจำว่างที่ไม่ถูกต้อง ตามค่าเริ่มต้นมี tmpfs มากมายในการแจกแจงเช่น Debian หรือ Ubuntu ซึ่งหมายความว่า free -m ให้การแสดงผลหน่วยความจำว่างที่ไม่ถูกต้อง
การคำนวณหน่วยความจำของ htop นั้นค่อนข้างสมเหตุสมผล แล้วจะคำนวณค่า htop ได้อย่างไร /proc/meminfo
?