หลังจากการค้นคว้ายังคงสับสนเกี่ยวกับการตรวจสอบการใช้ RAM


10

ฉันอ่านบทความนี้ซึ่งอธิบายวิธีการต่าง ๆ ในการตรวจสอบการใช้ RAM ของคุณ อย่างไรก็ตามฉันไม่สามารถปรับวิธีการต่าง ๆ และไม่ทราบว่าวิธีใดถูกต้อง

เมื่อฉันเข้าสู่ระบบครั้งแรกฉันได้รับการต้อนรับด้วยหน้าจอเช่นนี้:

  System information as of Sun Apr 28 21:46:58 UTC 2013

  System load:  0.0               Processes:           76
  Usage of /:   15.6% of 7.87GB   Users logged in:     1
  Memory usage: 41%               IP address for eth0: 
  Swap usage:   0%

สิ่งนี้ชี้ให้เห็นว่าฉันใช้ RAM 41% ซึ่งค่อนข้างสูงเนื่องจากเซิร์ฟเวอร์ไม่ค่อยทำอะไร หรือหมายเลขนั้นอ้างถึงบางสิ่งบางอย่างนอกเหนือจาก RAM?

ต่อไปฉันลองfree -mวิธีการ:

ubuntu@ip-:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           590        513         76          0         67        315
-/+ buffers/cache:        130        459
Swap:            0          0          0

ตามกราฟิกอธิบายในบทความนี้แสดงว่าฉันมี RAM ที่ใช้แล้ว 130MB และ RAM ฟรี 459MB ซึ่งแนะนำว่าฉันใช้ RAM ประมาณ 22%

ต่อไปฉันรันtop:

top - 22:14:48 up 195 days, 21:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.3%us,  0.3%sy,  0.0%ni, 97.7%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    604376k total,   525692k used,    78684k free,    69124k buffers
Swap:        0k total,        0k used,        0k free,   322740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    1 root      20   0 24332 1864  976 S  0.0  0.3   0:08.75 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd     

นี่เป็นสิ่งที่สับสนมากที่สุดเนื่องจากบทสรุปแสดงให้ฉันเห็นว่าใช้ทั้งหมด 525MG จากทั้งหมด 604M และเมื่อใช้คำสั่งแบบโต้ตอบ "m" เพื่อเรียงลำดับตามหน่วยความจำสูงสุดกระบวนการด้านบนใช้หน่วยความจำเพียง 0.3% เท่านั้น

ในที่สุดpsคำสั่งดูเหมือนจะแสดงการใช้หน่วยความจำน้อยมากเช่นกัน:

root@ip-:/home/ubuntu# ps -o command,rss
COMMAND                       RSS
ps -o command,rss             788
sudo su root                 1764
su root                      1404
bash                         2132

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

ขอบคุณ!

แก้ไขสำหรับราหุล

Ouput จากcat /proc/meminfo:

MemTotal:         604376 kB
MemFree:          157564 kB
Buffers:           49640 kB
Cached:           231376 kB
SwapCached:            0 kB
Active:           290040 kB
Inactive:          97772 kB
Active(anon):     107672 kB
Inactive(anon):     4844 kB
Active(file):     182368 kB
Inactive(file):    92928 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                52 kB
Writeback:             0 kB
AnonPages:        106836 kB
Mapped:            22920 kB
Shmem:              5712 kB
Slab:              42032 kB
SReclaimable:      34016 kB
SUnreclaim:         8016 kB
KernelStack:         688 kB
PageTables:         3584 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      302188 kB
Committed_AS:     242768 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7152 kB
VmallocChunk:   34359729008 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      637952 kB
DirectMap2M:           0 kB

# 1) คำสั่งในด้านบนในการเรียงลำดับโดยหน่วยความจำไม่ได้เป็นเมตรก็M # 2) เพื่อดูกระบวนการทั้งหมดให้ลองคำสั่ง ** ps ax -o, rss **; สิ่งที่คุณวิ่งแค่แสดงให้เห็นถึงของคุณเอง
tink

โปรดอัปเดตผลลัพธ์ของเราด้วยcat /proc/meminfo
Rahul Patil


@ แท็กขอบคุณสำหรับคำอธิบายนั้น ฉันลองมาps ax -o rss | awk '{ sum+=$1} END {print sum}'แล้ว 153156
Jonah

@RahulPatil, OP อัปเดตแล้ว โปรดทราบว่ากระบวนการที่ทำงานอาจแตกต่างจากหมายเลขเดิมเล็กน้อย แต่ไม่ควรไกลขนาดนั้น นอกจากนี้ผลลัพธ์ที่ฉันได้รับสำหรับคุณดูเหมือนจะไม่ตรงกับผลลัพธ์ที่ฉันได้รับสำหรับความคิดเห็นด้านบนนี้ สิ่งเหล่านี้ถูกแยกออกจากกันเพียงไม่กี่นาที
โยนาห์

คำตอบ:


8

คุณเพียงแค่ต้องเข้าใจแนวคิดหน่วยความจำ

ตามผลลัพธ์ของ / proc / meminfo คุณเพียงแค่ต้องแจ้งให้ทราบด้านล่าง:

บัฟเฟอร์ : - บัฟเฟอร์เป็นสิ่งที่ยังไม่ได้ "เขียน" ลงในดิสก์ มันแสดงถึงจำนวน RAM ที่ทุ่มเทให้กับแคชดิสก์บล็อก "แคช" คล้ายกับ "บัฟเฟอร์" เฉพาะคราวนี้แคชหน้าเว็บจากการอ่านไฟล์

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

ก็พอที่จะเข้าใจว่า "บัฟเฟอร์" และ "แคช" แทนขนาดของแคชระบบ พวกมันขยายหรือย่อขนาดแบบไดนามิกตามที่ร้องขอโดยกลไกเคอร์เนล Linux ภายใน

ที่ webhosting พวกเขาล้างแคชโดยใช้ด้านล่าง cmd: (ส่วนใหญ่กำหนดค่าใน cron):

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

ลิงค์อ้างอิง

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

#!/bin/bash
total_mem=0

printf "%-10s%-10s\n" User MemUsage

while read u m
do
        [[ $old_user != $u ]] && { printf "%-10s%-0.1f\n" $old_user $total_mem; total_mem=0; }
        total_mem=$(echo $m + $total_mem | bc);
        old_user=$u

done < <(ps --no-headers -eo user,%mem| sort -k1)

#--EOF

กรุณาตรวจสอบกับสคริปต์ข้างต้นและแจ้งให้เราทราบหากมันแสดงอย่างถูกต้องหรือไม่


ขอบคุณราหุล หนึ่งคำถามสุดท้าย เนื่องจากfree -mไม่ได้ให้วิธีการดูหน่วยความจำที่ใช้ต่อผู้ใช้วิธีที่ถูกต้องในการกำหนดจำนวน RAM ที่ผู้ใช้แต่ละรายใช้จริงคืออะไร สิ่งนี้เกิดขึ้นเมื่อตรวจสอบการใช้หน่วยความจำของคุณเองบนเซิร์ฟเวอร์ที่ใช้ร่วมกัน
โยนาห์

@Jonah ฉันได้อัพเดท .. โปรดตรวจสอบและแจ้งให้เราทราบ
Rahul Patil

สคริปต์นั้นไม่ทำงานตามที่คาดไว้ .. แต่ฉันพยายามจะอัปเดตในไม่ช้า
Rahul Patil

@Jonah ขอบคุณที่ยอมรับคำตอบของฉัน .. แต่ขอบคุณจริงๆสำหรับ MichaelHampton ...
Rahul Patil

2

คำตอบที่ดี @RahulPatil

อีกจุดที่ต้องพิจารณาเกี่ยวกับ ps หรือด้านบนมีดังนี้

เครื่องมือนี้ [exmap] มีความแม่นยำมากกว่า ps หรือบนสุดเนื่องจากคำนึงถึงไลบรารีที่ใช้ร่วมกันที่แอพพลิเคชั่นหลายตัวใช้ร่วมกัน ตัวอย่างเช่นหากสองแอปพลิเคชันใช้ไลบรารีที่แชร์เดียวกันซึ่งใช้หน่วยความจำ 1MB ขึ้นไป ps จะแสดงแอปทั้งสองที่ใช้หน่วยความจำเพิ่มเติม 1MB ในขณะที่ exmap แสดงแต่ละแอปอย่างถูกต้องมากขึ้นโดยใช้ 500 KB ความแม่นยำที่ยิ่งใหญ่กว่านี้มีความสำคัญอย่างยิ่งสำหรับการประเมินสภาพแวดล้อมเดสก์ท็อปเช่น KDE และ GNOME ซึ่งใช้ประโยชน์อย่างมากจากไลบรารีที่แบ่งใช้ระหว่างแอปพลิเคชัน

ผ่านibm / developerworks / linux_memory

เนื่องจากคำถามของคุณอ้างถึงเซิร์ฟเวอร์หัวขาด - ฉันไม่แน่ใจว่าจะมีการรายงานสองเท่าหรือ ps มากเท่าไหร่


0

ฉันกลัวว่าเราอาจจะมองเห็นชัดเจนเพราะมันเป็น "แน่นอน" สำหรับพวกเราส่วนใหญ่

โจนาห์ยกโทษให้ฉันถ้าฉันผิด แต่คำถามของคุณฟังดูเหมือนคุณอาจไม่ได้ตระหนักว่าค่าเหล่านี้ทั้งหมดโดยเฉพาะอย่างยิ่งการใช้งาน CPU โดยทั่วไปจะแตกต่างกันไปค่อนข้างมากจากวินาทีถึงวินาที

การใช้งาน CPU อาจเปลี่ยนจากตัวเลขหลักเดียวเป็น 100% ทันทีที่กระบวนการใหม่เริ่มต้นขึ้น แต่อย่างรวดเร็ว (หวังว่า) จะกลับไปสู่ช่วงย่อย 50%

การใช้หน่วยความจำมีการเปลี่ยนแปลงช้ากว่า แต่ Linux พยายามใช้หน่วยความจำที่ไม่ได้ใช้งานโดยการใช้กระบวนการสำหรับการเข้าถึงดิสก์ "แคช" ตัวอย่างเช่นจะพยายามคาดเดาสิ่งที่จะต้องอ่านจากดิสก์ถัดไปเช่นอาจเป็นไฟล์ขนาดใหญ่ที่เหลือหลังจากอ่านส่วนแล้วและโหลดไว้ล่วงหน้าในแคช ค่าการใช้หน่วยความจำบางส่วนมีทั้งหน่วยความจำที่ใช้โดยกระบวนการเช่นเดียวกับหน่วยความจำที่ใช้สำหรับแคช ในระบบที่ใช้งานมาชั่วครู่ทั้งสองระบบอาจรวมกันเป็น 80-90% หรือมากกว่า

พิจารณาด้วยเช่นกันว่ากระบวนการที่คุณรันเพื่อแสดงการใช้งานเช่นtopใช้ CPU และหน่วยความจำเช่นกัน หากคุณเขียนสคริปต์ที่มีลูปเพื่อรายงานการใช้งาน CPU อย่างต่อเนื่องมันจะแสดง 100% เสมอเพราะการรายงานการใช้งานเอง (โดยไม่ sleep ล่าช้าเกิดขึ้น) ใช้ CPU ทั้งหมด


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