如何监视每个进程/每个线程的内存消耗(分为堆,堆栈,数据,代码)?


11

在开始编写自己的代码之前,我想确定是否有GNU / Linux软件能够输出类似于QNX的软件showmem

对于正在运行的每个进程的每个线程,我希望看到内存消耗分为以下几类:

 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 2015年

是的,但是我希望可以运行一些工具并自动输出内存信息。
Alex Dima 2015年

我确定那里有针对特定需求的内存分析器。大多数人只是可以定期保存该proc文件的内容。FWIW听起来好像valgrind的组件之一具有非常好的分析器。我从未使用过它,但也许这是您进入的方向。
布拉奇利,2015年

Answers:


6

您可以使用来查看一些信息pmap -x PID-对于进程的每个库/模块/打开文件/堆栈,该信息分为KB,rss和脏内存:

undefine @ uml:〜$ pmap -x 13206
13206:睡眠60
地址千字节RSS脏模式映射
0000000000400000 24 20 0接收-睡眠
0000000000606000 4 4 4 r ----睡眠
0000000000607000 4 4 4 rw ---睡眠
000000000063b000 132 8 8 rw --- [anon]
00007f6a9847e000 4308 44 0 r ----语言环境归档
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 --- [anon]
00007f6a98c79000 140 116 0 rx-- ld-2.19.so
00007f6a98e71000 12 12 12 rw --- [anon]
00007f6a98e99000 8 8 8 rw --- [anon]
00007f6a98e9b000 4 4 4 r ---- ld-2.19.so
00007f6a98e9c000 4 4 4 rw --- ld-2.19.so
00007f6a98e9d000 4 4 4 rw --- [anon]
00007fff09fd0000 132 12 12 rw --- [堆栈]
00007fff09ffe000 8 4 0 rx-- [anon]
ffffffffff600000 4 0 0 rx-- [anon]
---------------- ------- ------- ------- 
总计kB 8652 656 96
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.