Ubuntu Linux: ประมวลผลการสลับหน่วยความจำและการใช้หน่วยความจำ


14

Ubuntu ของฉันกินหน่วยความจำมากกว่าตัวจัดการงานกำลังแสดง:

sudo ps -e --format rss  | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29

free -m

             total       used       free     shared    buffers     cached
Mem:          3860       2765       1094          0          3        300
-/+ buffers/cache:       2461       1398
Swap:         2729       2374        354

มันแปลกมาก มีคนอธิบายความแตกต่างนี้ได้ไหม

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

ฉันยังพยายามที่จะแสดงรูปแบบ param "sz" ของ 'ps' แต่ผลรวมของสิ่งนี้คือสูง (16000 MB) (ขนาด param 'ขนาด' ให้ 36700 MB) มีตัวเลือกอื่น ๆ อีกไหม?

ฉันต้องการใช้สิ่งนี้เพื่อตรวจสอบว่าโปรแกรม / กระบวนการใดกำลังกินหน่วยความจำมาก (และสลับ) เพื่อฆ่าพวกเขาเพราะหน่วยความจำมีค่า :-) นี่มันไม่สมเหตุสมผลจริงๆดังนั้นฉันจึงถามที่นี่

ผลลัพธ์ของ / proc / meminfo:

MemTotal:        3952812 kB                
MemFree:         1119192 kB
Buffers:            2676 kB
Cached:           290068 kB
SwapCached:       160980 kB
Active:          1805396 kB
Inactive:         731680 kB
Active(anon):    1745820 kB
Inactive(anon):   689184 kB
Active(file):      59576 kB
Inactive(file):    42496 kB
Unevictable:         148 kB
Mlocked:             148 kB
SwapTotal:       2795272 kB
SwapFree:         390900 kB
Dirty:              1984 kB
Writeback:             0 kB
AnonPages:       2085472 kB
Mapped:            67432 kB
Shmem:            190676 kB
Slab:              88012 kB
SReclaimable:      42704 kB
SUnreclaim:        45308 kB
KernelStack:        5496 kB
PageTables:        87860 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4771676 kB
Committed_AS:    9522364 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      374404 kB
VmallocChunk:   34359330144 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       61440 kB
DirectMap2M:     4030464 kB

ฉันควรชี้ให้เห็นว่า "1043.84" ไม่ไกลจาก "1178" ซึ่งเป็นจำนวนที่คุณจะได้รับเมื่อใช้การคำนวณนั้น
cjc

ฉันมีคำถามที่เหมือนกันอย่างแท้จริงใน unix.stackexchange (+1) แพทริคเป่าใจฉันด้วย: P-- unix.stackexchange.com/questions/34795/…
GoldenNewby

คำตอบ:


10

ระบบหน่วยความจำเสมือนของ linux นั้นไม่ง่ายนัก คุณไม่สามารถเพียงแค่เพิ่มขึ้นทุกเขตข้อมูล RSS และได้รับค่าที่รายงานโดยused freeมีเหตุผลหลายประการสำหรับเรื่องนี้ แต่ฉันจะไปหาสองคนที่ยิ่งใหญ่ที่สุด

  • เมื่อกระบวนการดึงทั้งผู้ปกครองและเด็กจะแสดงด้วย RSS เดียวกัน อย่างไรก็ตาม linux ใช้งานcopy-on-writeเพื่อให้กระบวนการทั้งสองใช้หน่วยความจำเดียวกันจริงๆ เฉพาะเมื่อหนึ่งในกระบวนการปรับเปลี่ยนหน่วยความจำมันจะถูกทำซ้ำจริง ดังนั้นสิ่งนี้จะทำให้freeจำนวนนั้นน้อยกว่าtopผลรวม RSS

  • ค่า RSS ไม่รวมหน่วยความจำที่แชร์ เนื่องจากหน่วยความจำที่ใช้ร่วมกันไม่ได้เป็นเจ้าของโดยกระบวนการใดกระบวนการหนึ่งtopจึงไม่รวมไว้ใน RSS ดังนั้นสิ่งนี้จะทำให้freeจำนวนนั้นมากกว่าtopผลรวม RSS


โอ้ขอบคุณ! ฉันคิดเสมอว่าฟรี -m แสดงผลรวมหน่วยความจำที่ใช้ร่วมกันจริงของระบบทั้งหมด แต่ในขณะที่ "man ps" ชี้ให้เห็น: "ควรจะละเว้นคอลัมน์หน่วยความจำที่ใช้ร่วมกันซึ่งล้าสมัยแล้ว"
David Halter

ขออภัยฉันไม่สามารถยอมรับคำตอบนี้เพราะมันไม่ได้ตอบปัญหาการแลกเปลี่ยน แต่ขอขอบคุณ!
David Halter

@DavidHalter ปัญหาการแลกเปลี่ยนคืออะไร ข้อมูลที่ฉันให้มีผลใช้กับหน่วยความจำทั้งหมดรวมถึง swap
แพทริค

หน่วยความจำที่ใช้ร่วมกันไม่ใหญ่จริง ๆ ปกติหรือไม่ อย่างน้อยนั่นคือสิ่งที่ฉันเห็นในตัวจัดการงาน แต่การแลกเปลี่ยนของฉันถูกใช้อย่างหนัก: 1,035 MB; ผลรวมของ PS คือ 1 GB และผลรวมของ swap + rss คือ> 2 GB ฉันต้องการดูว่ากระบวนการใช้หน่วยความจำมากเพียงใดไม่ใช่แค่ RSS ยิ่ง interessting จะเป็นเท่าใดหน่วยความจำสลับกระบวนการใช้
David Halter

1
@DavidHalter หากคุณต้องการดูจำนวนหน่วยความจำที่กระบวนการใช้ (รวมถึงการแชร์) จากนั้นให้ดูที่คอลัมน์ 'VSZ'
แพทริค

1

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

เพียงเพราะผลรวมของค่า "ps" RSS ไม่เท่ากับ "ฟรี" ไม่ได้หยุดคุณจากการเรียงลำดับกระบวนการของคุณด้วย RSS และประเมินค่าที่ยิ่งใหญ่ที่สุดสำหรับการฆ่า

ดังที่กล่าวไว้หากความพยายามทั้งหมดของคุณเป็นเพียงการให้บริการเพื่อให้แน่ใจว่าเครื่องสามารถจำศีลสร้างการแลกเปลี่ยนเพิ่มเติม (ในรูปแบบของไฟล์บนดิสก์หากจำเป็น) อาจเป็นเส้นทางที่ง่ายกว่า


1

ในที่สุดฉันก็ได้รับคำตอบสำหรับคำถามของฉัน มีโปรแกรมชื่อ smem (บน Ubuntu / Debian apt install smem) ที่ให้คุณสลับรายการและใช้หน่วยความจำแยกต่างหาก

วิธีการที่แตกต่างกันไม่กี่รายการแลกเปลี่ยนสามารถพบได้ที่นี่: https://www.cyberciti.biz/faq/linux-which-process-is-using-swap/

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