การใช้หน่วยความจำสูง แต่ไม่มีกระบวนการใช้งาน


17

ฉันทำงานfree -mบนเดเบียน VM ที่ทำงานบน Hyper-V:

             total       used       free     shared    buffers     cached
Mem:         10017       9475        541        147         34        909
-/+ buffers/cache:       8531       1485
Swap:         1905          0       1905

ดังนั้นจากหน่วยความจำ 10GB ของฉันมีการใช้งาน 8.5GB และฟรีเพียง 1500MB (ไม่รวมแคช)

แต่ฉันพยายามหาสิ่งที่ใช้หน่วยความจำ ผลลัพธ์ของps aux | awk '{sum+=$6} END {print sum / 1024}'ซึ่งควรจะเพิ่มการใช้งาน RSS คือ:

1005.2

กล่าวอีกนัยหนึ่งกระบวนการของฉันใช้หน่วยความจำ 1GB เท่านั้น แต่ระบบโดยรวม (ไม่รวมแคช) ใช้ 8.5GB

สิ่งที่สามารถใช้ 7.5GB อื่น ๆ ?

ป.ล. : ฉันมีเซิร์ฟเวอร์อื่นที่มีการกำหนดค่าคล้ายกันซึ่งแสดง mem ที่ใช้งาน 1200 (free mem = 8.8GB) และผลรวมของการใช้ RSS ใน ps คือ 900 ซึ่งใกล้เคียงกับที่ฉันคาดไว้มากที่สุด ...


แก้ไข

cat /proc/meminfo บนเครื่อง 1 (หน่วยความจำต่ำ):

MemTotal:       10257656 kB
MemFree:          395840 kB
MemAvailable:    1428508 kB
Buffers:          162640 kB
Cached:          1173040 kB
SwapCached:          176 kB
Active:          1810200 kB
Inactive:         476668 kB
Active(anon):     942816 kB
Inactive(anon):   176184 kB
Active(file):     867384 kB
Inactive(file):   300484 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1951740 kB
SwapFree:        1951528 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        951016 kB
Mapped:           224388 kB
Shmem:            167820 kB
Slab:              86464 kB
SReclaimable:      67488 kB
SUnreclaim:        18976 kB
KernelStack:        6736 kB
PageTables:        13728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     7080568 kB
Committed_AS:    1893156 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62284 kB
VmallocChunk:   34359672552 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67520 kB
DirectMap2M:    10418176 kB

cat /proc/meminfo บนเครื่อง 2 (การใช้หน่วยความจำปกติ):

MemTotal:       12326128 kB
MemFree:         8895188 kB
MemAvailable:   10947592 kB
Buffers:          191548 kB
Cached:          2188088 kB
SwapCached:            0 kB
Active:          2890128 kB
Inactive:         350360 kB
Active(anon):    1018116 kB
Inactive(anon):    33320 kB
Active(file):    1872012 kB
Inactive(file):   317040 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3442684 kB
SwapFree:        3442684 kB
Dirty:                44 kB
Writeback:             0 kB
AnonPages:        860880 kB
Mapped:           204680 kB
Shmem:            190588 kB
Slab:              86812 kB
SReclaimable:      64556 kB
SUnreclaim:        22256 kB
KernelStack:       10576 kB
PageTables:        11924 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     9605748 kB
Committed_AS:    1753476 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       62708 kB
VmallocChunk:   34359671804 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:    12519424 kB

คำตอบ:


15

ฉันเข้าใจว่าคุณกำลังใช้ Hyper-V แต่แนวคิดคล้ายกัน บางทีนี่อาจจะทำให้คุณถูกทาง

ปัญหาของคุณน่าจะเกิดจากการบอลลูนหน่วยความจำเสมือนเทคนิคที่ใช้ในการเพิ่มประสิทธิภาพหน่วยความจำไฮเปอร์ไวเซอร์ ดูลิงค์นี้สำหรับคำอธิบาย

ฉันสังเกตอาการเดียวกันของคุณกับ VMs ของฉันใน vSphere เครื่อง 4G ที่ไม่มีสิ่งใดทำงานอยู่จะรายงาน 30M ที่แคชใช้ แต่กว่า 3G "ใช้แล้ว" ในบรรทัด "- / + บัฟเฟอร์"

นี่คือตัวอย่างเอาต์พุตจากคำสั่งสถิติของ VMWare นี่แสดงให้เห็นว่าจำนวนเงินที่ "ใช้แล้ว" ของฉันถูกยึดติดกับ 3G ได้อย่างไร:

vmware-toolbox-cmd stat balloon
3264 MB

ในกรณีของฉันเห็นได้ชัดว่าคนขับบอลลูนของฉันใช้ ~ 3G

ฉันไม่แน่ใจว่าคำสั่งที่คล้ายกันใน Hyper-V คืออะไรเพื่อให้ได้สถานะบอลลูนของคุณ แต่ฉันแน่ใจว่าคุณจะได้ผลลัพธ์ที่คล้ายกัน


ขอบคุณ - คุณเข้าสู่บางสิ่ง lsmod | grep hv_ แสดง hv_balloon บนเครื่องที่มีหน่วยความจำเหลือน้อย แต่ไม่ได้อยู่ที่อื่น - ดังนั้นจึงทำการโหลดโมดูลบอลลูนที่หนึ่งและไม่ใช่ที่อื่น และพฤติกรรมนั้นดูเหมือนคำอธิบายนี้มาก
assylias

ไม่แน่ใจว่าเทียบเท่าvmware-toolbox-cmdกับ Hyper V อย่างไร
assylias

@assylias ฉันรู้ว่าขอโทษ ฉันดูตัวเองในขณะที่เขียนคำตอบนี้และว่างเปล่า อย่างไรก็ตามถ้าคุณเขียนโปรแกรมที่จัดสรรหน่วยความจำจำนวนมากอย่างรวดเร็วนั่นอาจทำให้ hypervisor ที่ VM ของคุณต้องการทรัพยากร คล้ายกับกรณีทดสอบการไล่ดิสก์แคช แต่สาเหตุที่แตกต่างกัน
Matt

คุณสามารถยกเลิกการตั้งค่าคุณสมบัติแรมแบบไดนามิกใน Hyper-V เพื่อแก้ปัญหานี้
Ashish Negi

ฉันไม่เห็นวิธีแก้ปัญหาที่นี่ฉันกลัว
Jamie Hutber

1

/server/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free

คำตอบสั้น ๆ : เคอร์เนลใช้หน่วยความจำบัฟเฟอร์ / แคชสำหรับงานต่าง ๆ เช่นไฟล์แคช หน่วยความจำนี้พร้อมใช้งานสำหรับแอปพลิเคชั่นหากจำเป็นคุณจึงพูดถูกว่าคุณใช้ 944 MB


ตามลิงก์นั้น 944MB คือปริมาณแคช
assylias

2
ไม่ได้ 944MB เป็นปริมาณ RAM ที่ใช้งานจริงโดยแอปพลิเคชันและไม่สามารถใช้งานกับแอปพลิเคชันอื่น ๆ ได้ อ่านโพสต์นั้น: "Linux (เช่น OS ที่ทันสมัยที่สุด) จะพยายามใช้ RAM ฟรีสำหรับการแคชเนื้อหาดังนั้น Mem: ฟรีจะต่ำมากเสมอดังนั้นบรรทัด - / + บัฟเฟอร์ / แคช: แสดงเพราะแสดง จำนวนหน่วยความจำที่ว่างเมื่อไม่สนใจแคชและแคชจะถูกปล่อยโดยอัตโนมัติหากหน่วยความจำเหลือน้อยดังนั้นมันจึงไม่สำคัญ
vik

ใช่และ - / + บัฟเฟอร์ / แคชแสดง mem ฟรี 1.5GB ...
assylias

โปรดเข้าใจ 1485 ฟรีในแคช - / + บัฟเฟอร์ไม่ได้เป็นจำนวนหน่วยความจำที่มีอยู่สำหรับการใช้งานในระบบ จำนวนหน่วยความจำที่แอพพลิเคชั่นใช้งานจริงของคุณคือ: (10017 - (9475 - 8531)) = 9073 สิ่งนี้เหมาะสมหรือไม่
vik

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