วิธีตรวจสอบกระบวนการที่ใช้หน่วยความจำส่วนใหญ่


33

เมื่อฉันเช็คอินfreeหนึ่งในเซิร์ฟเวอร์ Prod แสดงว่ามีการใช้งานหน่วยความจำ 70%:

             total       used       free     shared    buffers     cached
Mem:     164923172  141171860   23751312          0    4555616   20648048
-/+ buffers/cache:  115968196   48954976
Swap:      8388600          0    8388600

แต่ฉันไม่พบกระบวนการที่ใช้หน่วยความจำฉันลองใช้topคำสั่งและกำลังแสดงกระบวนการโดยใช้หน่วยความจำเพียง 1.1 และ 5.4%

ฉันจะค้นหากระบวนการที่ใช้หน่วยความจำได้อย่างไร

ด้านล่างนี้คือผลลัพธ์คำสั่งยอดนิยม:

15085 couchbas  25   0 2784m 2.4g  40m S 183.7  1.5 299597:00 beam.smp
28248 tibco     18   0  124m 100m 3440 S 20.9  0.1   2721:45 tibemsd
15334 couchbas  15   0 9114m 8.6g 3288 S  9.0  5.4  12996:28 memcached
15335 couchbas  18   0  6024  600  468 S  2.0  0.0   1704:54 sigar_port
15319 couchbas  15   0  775m 2516  944 S  0.7  0.0 269:13.41 i386-linux-godu
12167 tibco     16   0 11284 1464  784 R  0.3  0.0   0:00.04 top
12701 root      15   0  451m 427m 2140 S  0.3  0.3  18:25.02 controller
13163 root      11  -5     0    0    0 S  0.3  0.0 289:58.58 vxglm_thread


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

1
พยายามเรียงลำดับผลลัพธ์สูงสุด - เมื่อทำงานกด Shift + m
Eenoku

คำตอบ:


50

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

ps aux --sort=-%mem | awk 'NR<=10{print $0}'

ใช้ด้านบน: เมื่อคุณเปิดกดด้านบน mจะเป็นการประมวลผลสั้น ๆ ตามการใช้หน่วยความจำ

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

lsof จะให้ไฟล์ที่เปิดทั้งหมดกับขนาดของไฟล์หรือไฟล์ออฟเซตเป็นไบต์


5
คุณสามารถใช้headแทนสคริปต์ awk นี้ - มันให้ผลลัพธ์เดียวกันและคุณช่วยตัวเองในการเขียนตัวอักษรแปลก ๆ มากมาย
โฟมบินได้

9

หน่วยความจำของคุณไม่ได้ใช้จริง ลีนุกซ์จะทำการแคชข้อมูลบนดิสก์ของคุณเป็นค่าเริ่มต้นและเก็บสิ่งที่แคชไว้ในส่วน "ใช้แล้ว" ของ ram

หากคุณโหลดแอปพลิเคชั่นที่ใช้ RAM จริงมันจะเป็นแอปพลิเคชั่นที่ใช้

ดูhttp://www.linuxatemyram.com/


ใครพูดอะไรเกี่ยวกับลีนุกซ์?
Timothy Pulliam

OP มีกระบวนการ "i386-linux-godu"
Jean-Michaël Celerier

6

คุณสามารถไปป์psและเรียงลำดับเพื่อให้กระบวนการใช้หน่วยความจำมากที่สุด นอกจากนี้ยังช่วยให้คุณระบุรายละเอียดกระบวนการอื่น ๆ ที่คุณต้องการดูด้วย:

ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

PS: ข้างต้นถือว่าคอลัมน์หน่วยความจำของคุณเป็นครั้งแรก " sort -k 1 -n -r "


3

คุณสามารถใช้คำสั่ง slabtop เพื่อดูว่าวัตถุแผ่นพื้นถูกใช้โดยเคอร์เนล
นอกจากนี้คุณสามารถตรวจสอบผลลัพธ์ของ / proc / meminfo

ค้นหา 2 บรรทัดเหล่านี้ในเอาต์พุต

Slab:              68136 kB
SReclaimable:      21208 kB 

ตัวอย่างข้างต้นแสดงให้เห็นถึง 68MB ของแผ่นพื้นแคชที่ใช้โดยเคอร์เนลและ 21MB สามารถเรียกคืนได้ หากต้องการเรียกคืนคุณสามารถใช้เทคนิคที่อธิบายไว้ที่นี่https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  

1

สำหรับการวิเคราะห์แบบโต้ตอบที่คุณสามารถใช้htopคีย์ฟังก์ชั่นจากนั้นกดF6ที่จะเลือกการเรียงลำดับการสั่งซื้อเช่นPERCENT_CPU(ใช้หน่วยความจำในร้อยละ) M_RESIDENT(ขนาดถิ่นที่อยู่ในหน่วยความจำหน่วยความจำจริงที่ถูกนำมาใช้) M_SIZE(ขนาดหน่วยความจำเสมือน) หรือM_SHARE(ขนาดของ หน่วยความจำที่ใช้ร่วมกัน) สองคนแรกเป็นตัวเลขที่เกี่ยวข้อง

เส้นสีเขียวคือชุดข้อความ กดปุ่ม (ตัวพิมพ์ใหญ่) KและHซ่อน

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