ทำไมการใช้งานหน่วยความจำใน“ top” จึงไม่เพิ่มขึ้น?


28

ฉันสังเกตเห็นว่าบางครั้งเมื่อฉันเรียกใช้บนการใช้หน่วยความจำของแต่ละกระบวนการในตารางกระบวนการดูเหมือนจะไม่เพิ่มขึ้นรวม

ตัวอย่างเช่นในการถ่ายโอนข้อมูลด้านบน top บอกว่าฉันใช้หน่วยความจำ 16 Gb อย่างไรก็ตามตารางกระบวนการแสดงเพียงสองกระบวนการโดยใช้มากกว่า 520 Mb เล็กน้อย ฉันจะรู้ได้อย่างไรว่าอีก 15.5 Gb นั้นกินอะไรอีก? (ฉันใช้ CentOS)

$ ด้านบน

ด้านบน - 12:16:34 ขึ้น 45 วัน, 2:28, ผู้ใช้ 3 คน, โหลดเฉลี่ย: 0.24, 0.65, 0.71
งาน: รวม 274, 1 ทำงาน, 273 นอนหลับ, 0 หยุด, 0 ซอมบี้
Cpu: 2.3% เรา, 0.2% sy, 0.0% ni, id 97.5%, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st
Mem: ยอดรวม 16432032k, ใช้แล้ว 16340144k, ฟรี 91888k, 21736k บัฟเฟอร์
สลับ: ยอดรวม 18481144k, ใช้แล้ว 1112k, ฟรี 18480032k, แคช 15624488k

  PID ผู้ใช้ PR NI VIRT RES SHR S% CPU% MEM TIME + คำสั่ง
18159 jsmith 15 0 260m 31m 4560 S 16.6 0.2 53: 35.64 python
 4795 26 15 0 260m 6608 4220 S 2.0 0.0 0: 00.06 ไปรษณีย์
    1 root 15 0 10344 680 568 S 0.0 0.0 0: 39.36 init
    2 root RT -5 0 0 0 S 0.0 0.0 0: 00.53 การโยกย้าย / 0
    3 root 34 19 0 0 0 S 0.0 0.0 0: 00.62 ksoftirqd / 0
    4 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 0
    5 root RT -5 0 0 0 S 0.0 0.0 0: 02.09 การโยกย้าย / 1
    6 root 34 19 0 0 0 S 0.0 0.0 0: 01.32 ksoftirqd / 1
    7 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 1
    8 root RT -5 0 0 0 S 0.0 0.0 0: 00.99 การโยกย้าย / 2
    9 root 34 19 0 0 0 S 0.0 0.0 0: 01.74 ksoftirqd / 2
   10 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 2
   11 root RT -5 0 0 0 S 0.0 0.0 0: 02.16 การโยกย้าย / 3
   12 root 34 19 0 0 0 S 0.0 0.0 0: 01.30 ksoftirqd / 3
   13 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 3
   14 root RT -5 0 0 0 S 0.0 0.0 0: 01.94 การโยกย้าย / 4
   15 root 34 19 0 0 0 S 0.0 0.0 0: 01.78 ksoftirqd / 4
   16 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 4
   17 root RT -5 0 0 0 S 0.0 0.0 0: 01.92 การโยกย้าย / 5
   18 root 34 19 0 0 0 S 0.0 0.0 0: 01.30 ksoftirqd / 5
   19 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 5
   20 root RT -5 0 0 0 S 0.0 0.0 0: 02.06 การโยกย้าย / 6
   21 root 34 19 0 0 0 S 0.0 0.0 0: 01.83 ksoftirqd / 6
   22 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 6
   23 root RT -5 0 0 0 S 0.0 0.0 0: 02.31 การโยกย้าย / 7
   24 root 34 19 0 0 0 S 0.0 0.0 0: 01.50 ksoftirqd / 7
   25 root RT -5 0 0 0 S 0.0 0.0 0: 00.00 สุนัขเฝ้าบ้าน / 7
   26 root 10 -5 0 0 0 S 0.0 0.0 0: 00.42 เหตุการณ์ / 0
   27 root 10 -5 0 0 0 S 0.0 0.0 0: 00.28 เหตุการณ์ / 1
   28 root 10 -5 0 0 0 S 0.0 0.0 0: 00.37 เหตุการณ์ / 2
   29 root 10 -5 0 0 0 S 0.0 0.0 0: 00.21 เหตุการณ์ / 3
   30 root 10 -5 0 0 0 S 0.0 0.0 0: 00.38 เหตุการณ์ / 4
   31 root 10 -5 0 0 0 S 0.0 0.0 0: 00.27 เหตุการณ์ / 5
   32 root 10 -5 0 0 0 S 0.0 0.0 0: 00.52 เหตุการณ์ / 6
   33 root 10 -5 0 0 0 S 0.0 0.0 0: 00.64 เหตุการณ์ / 7
   34 root 10 -5 0 0 0 S 0.0 0.0 0: 00.00 khelper

คำตอบ:


26

จากบรรทัดที่เกี่ยวข้องกับการใช้หน่วยความจำด้านบน:

Mem: 16432032k total, 16340144k used, 91888k free, 21736k buffers
Swap: 18481144k total, 1112k used, 18480032k free, 15624488k cached

มาละเว้นการแลกเปลี่ยนกัน หน่วยความจำทั้งหมดเท่ากับผลรวมของหน่วยความจำที่ใช้และหน่วยความจำอิสระ ใช้แล้วตรงกันข้ามคือผลรวมของ "แอปพลิเคชันที่ใช้งานจริง" และแคชและบัฟเฟอร์ ดังนั้นในกรณีของคุณจะเป็นเช่นนี้:

  • Mem = 16432032k = 16340144k + 91888k;
  • "แอปพลิเคชันใช้งานจริง" = ใช้แล้ว - (แคช + บัฟเฟอร์) = 16340144k - (15624488k + 21736k) = 693920k

อีก 15.5 GB ถูกแคช สิ่งนี้ช่วยปรับปรุงประสิทธิภาพ อย่างไรก็ตามในช่วงเวลาที่แอปพลิเคชันต้องการส่วนหนึ่งของหน่วยความจำแคชมันจะได้รับทันที topคุณจะสังเกตเห็นนี้ถ้าคุณเรียกใช้หน่วยความจำบางแอปพลิเคหิวและจอมอนิเตอร์


1

รายการนั้นดูไม่เหมือน274 totalกระบวนการสำหรับฉัน โดยปกติแล้วด้านบนจะแสดงเฉพาะสิ่งที่เหมาะสมกับเทอร์มินัล / หน้าจอของคุณ ใช้ps auxแทนและเพิ่มrssค่า (หรือคอลัมน์หน่วยความจำที่อยู่ในเวอร์ชั่นที่คุณแสดง)

คุณไม่ต้องการเพิ่มขนาดหน่วยความจำเสมือนดูเหมือนว่าคุณสนใจRESคอลัมน์resident ( )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.