ฉันจะตรวจสอบปริมาณการใช้หน่วยความจำต่อกระบวนการ / ต่อเธรดได้อย่างไร (แบ่งออกเป็นฮีปสแต็คข้อมูลรหัส)


11

ก่อนที่จะกระโดดและเขียนรหัสของตัวเองฉันต้องการตรวจสอบว่ามีซอฟต์แวร์ GNU / Linux ที่สามารถส่งออกบางสิ่งที่คล้ายกับQNXshowmemหรือไม่

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

 Process listing (Total, Code, Data, Heap, Stack, Other)
 319488  1024000      24587     167936      24576          0        4103 devc-con-hid (thread 2)
    0          0          0          0       4096          0        4103 devc-con-hid (thread 2)
    0          0          0          0      20480          0        4103 devc-con-hid (thread 1)
    0     102400       8192          0          0          0        4103 devc-con-hid (proc/boot/devc-con-hid)
    0          0      16384          0          0          0        4103 devc-con-hid (proc/boot/libc.so.3)
    0          0          0          0          0  (   36864)       4103 devc-con-hid (/dev/mem)

มีอะไรที่จะทำให้เรื่องนี้เป็นไปได้หรือไม่?


ดูเหมือนว่าข้อมูลส่วนใหญ่อยู่ใน/proc/$PID/smaps
Bratchley

ถูกต้อง แต่ฉันหวังว่าจะมีเครื่องมือบางอย่างที่ฉันสามารถเรียกใช้และส่งออกข้อมูลหน่วยความจำโดยอัตโนมัติ
Alex Dima

ฉันแน่ใจว่ามีตัวรวบรวมหน่วยความจำสำหรับผู้ที่มีความต้องการเฉพาะ คนส่วนใหญ่สามารถบันทึกเนื้อหาของไฟล์ proc นั้นเป็นระยะ FWIW ดูเหมือนว่าหนึ่งในองค์ประกอบของ valgrindมีตัวสร้างโปรไฟล์ที่ดี ฉันไม่เคยใช้มัน แต่อาจเป็นทิศทางที่คุณจะเข้าไป
Bratchley

คำตอบ:


6

คุณสามารถดูข้อมูลโดยใช้pmap -x PID- มันแบ่งออกเป็น kbytes, rss และหน่วยความจำสกปรกสำหรับแต่ละไลบรารี / โมดูล / เปิดไฟล์ / สแต็คของกระบวนการ:

undefine @ uml: ~ $ pmap -x 13206
13206: นอน 60
ที่อยู่ Kbytes RSS การทำแผนที่โหมดสกปรก
0000000000400000 24 20 0 rx-- การนอนหลับ
0000000000606000 4 4 4 r ---- การนอนหลับ
0000000000607000 4 4 4 rw --- นอนหลับ
000000000063b000 132 8 8 rw --- [อานนท์]
00007f6a9847e000 4308 44 0 r ---- locale-archive
00007f6a988b3000 1772 376 0 rx-- libc-2.19.so
00007f6a98a6e000 2048 0 0 ----- libc-2.19.so
00007f6a98c6e000 16 16 16 r ---- libc-2.19.so
00007f6a98c72000 8 8 8 rw --- libc-2.19.so
00007f6a98c74000 20 12 12 rw --- [อานนท์]
00007f6a98c79000 140 116 0 rx-- ld-2.19.so
00007f6a98e71000 12 12 12 rw --- [อานนท์]
00007f6a98e99000 8 8 8 rw --- [อานนท์]
00007f6a98e9b000 4 4 4 r ---- ld-2.19.so
00007f6a98e9c000 4 4 4 rw --- ld-2.19.so
00007f6a98e9d000 4 4 4 rw --- [อานนท์]
00007fff09fd0000 132 12 12 rw --- [สแต็ค]
00007fff09ffe000 8 4 0 rx-- [anon]
fffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
รวม kB 8652 656 96
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.