ใช้งาน Ubuntu บนเคอร์เนล 2.6.31-302 x86-64 ปัญหาโดยรวมคือฉันมีหน่วยความจำในหมวดหมู่ 'แคช' ที่เพิ่มขึ้นเรื่อย ๆ และจะไม่ถูกปลดปล่อยหรือใช้งานแม้ว่าแอปพลิเคชันของเราต้องการ
ดังนั้นนี่คือสิ่งที่ฉันได้รับจากคำสั่ง 'ฟรี' สิ่งเหล่านี้ไม่ได้ดูออกมาจากภาพธรรมดาในครั้งแรก
# free
total used free shared buffers cached
Mem: 7358492 5750320 1608172 0 7848 1443820
-/+ buffers/cache: 4298652 3059840
Swap: 0 0 0
สิ่งแรกที่ใครบางคนจะพูดคือ "ไม่ต้องกังวล linux จัดการหน่วยความจำนั้นโดยอัตโนมัติ" ใช่ฉันรู้ว่าตัวจัดการหน่วยความจำควรทำงานอย่างไร ปัญหาคือว่ามันไม่ได้ทำในสิ่งที่ถูกต้อง "แคช" 1.4 GB ที่นี่ดูเหมือนว่าจะสงวนไว้และไม่สามารถใช้งานได้
ความรู้เกี่ยวกับ Linux ของฉันบอกฉันว่า 3 GB เป็น "ฟรี"; แต่พฤติกรรมของระบบพูดเป็นอย่างอื่น เมื่อใช้หน่วยความจำว่างจริง 1.6 GB ในระหว่างการใช้งานสูงสุดทันทีที่มีการร้องขอหน่วยความจำเพิ่มเติม (และ 'ฟรี' ในคอลัมน์แรกเข้าใกล้ 0) OOM killer ถูกเรียกใช้กระบวนการถูกฆ่าและปัญหาเริ่มเกิดขึ้นแม้ว่า 'ฟรี' ในแถว - / + บัฟเฟอร์ / แคชยังคงมี 'ฟรี' ประมาณ 1.4 GB
ฉันได้ปรับค่า oom_adj ในกระบวนการหลักดังนั้นมันจึงไม่นำระบบมาที่หัวเข่าของมัน แต่ถึงอย่างนั้นกระบวนการที่สำคัญก็จะถูกฆ่าและเราไม่ต้องการไปถึงจุดนั้น โดยเฉพาะอย่างยิ่งเมื่อในทางทฤษฎีแล้ว 1.4GB ยังคงเป็น "ฟรี" ถ้ามันจะขับไล่ดิสก์แคชเท่านั้น
ไม่มีใครมีความคิดว่าเกิดอะไรขึ้นที่นี่ อินเทอร์เน็ตเต็มไปด้วยคำถามโง่ ๆ เกี่ยวกับคำสั่ง 'ฟรี' ของ Linux และ "ทำไมฉันไม่มีหน่วยความจำว่าง" และฉันไม่พบอะไรเกี่ยวกับปัญหานี้เพราะสิ่งนั้น
สิ่งแรกที่โผล่เข้ามาในหัวของฉันคือการแลกเปลี่ยนนั้นปิด เรามีดูแลระบบที่ยืนกรานเกี่ยวกับมัน ฉันเปิดให้มีการอธิบายหากพวกเขาสำรอง อาจทำให้เกิดปัญหาได้หรือไม่
ที่นี่ฟรีหลังจากใช้งานecho 3 > /proc/sys/vm/drop_caches
:
# free
total used free shared buffers cached
Mem: 7358492 5731688 1626804 0 524 1406000
-/+ buffers/cache: 4325164 3033328
Swap: 0 0 0
อย่างที่คุณเห็นจำนวนแคชขนาดจิ๋วนั้นเพิ่มขึ้นจริง แต่ประมาณ 1.4 GB ดูเหมือนจะ "ติดอยู่" ปัญหาอื่นคือค่านี้ดูเหมือนจะเพิ่มขึ้นเมื่อเวลาผ่านไป บนเซิร์ฟเวอร์อื่น 2.0 GB ค้างอยู่
ฉันต้องการความทรงจำนี้กลับมา ... ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมากที่สุด
นี่คือcat /proc/meminfo
ถ้ามันมีค่าอะไร:
# cat /proc/meminfo
MemTotal: 7358492 kB
MemFree: 1472180 kB
Buffers: 5328 kB
Cached: 1435456 kB
SwapCached: 0 kB
Active: 5524644 kB
Inactive: 41380 kB
Active(anon): 5492108 kB
Inactive(anon): 0 kB
Active(file): 32536 kB
Inactive(file): 41380 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 320 kB
Writeback: 0 kB
AnonPages: 4125252 kB
Mapped: 42536 kB
Slab: 29432 kB
SReclaimable: 13872 kB
SUnreclaim: 15560 kB
PageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3679244 kB
Committed_AS: 7223012 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7696 kB
VmallocChunk: 34359729675 kB
DirectMap4k: 7340032 kB
DirectMap2M: 0 kB