在Linux上,如何使用内核转储和gdb来近似虚拟内存使用(VSZ)?
我正在编写一个用于核心转储分析的工具,我想打印的一件事是估计进程在转储时使用了多少虚拟内存。这些堆芯转储可能是由于崩溃造成的,也可能是使用gcore手动执行的(例如,用于调整大小)。本质上,我想打印PS-VSZ列的等价物 我已经研究了readelf和gdb,并重点研究了后者。例如,我有一个简单的挂起程序,我在PS中看到:在Linux上,如何使用内核转储和gdb来近似虚拟内存使用(VSZ)?,linux,gdb,Linux,Gdb,我正在编写一个用于核心转储分析的工具,我想打印的一件事是估计进程在转储时使用了多少虚拟内存。这些堆芯转储可能是由于崩溃造成的,也可能是使用gcore手动执行的(例如,用于调整大小)。本质上,我想打印PS-VSZ列的等价物 我已经研究了readelf和gdb,并重点研究了后者。例如,我有一个简单的挂起程序,我在PS中看到: $ ps auxwww | grep a.out USER PID %CPU %MEM VSZ RSS TTY STAT START TIM
$ ps auxwww | grep a.out
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 16644 0.0 0.0 4108 472 pts/5 S+ 13:51 0:00 ./a.out
我使用gcore获取一个内核,此时它使用4206592字节VSZ。然后我编写了一个快速脚本,解析info-target
输出,并对地址范围求和,得到1814528字节。我还尝试了info-proc-mappings
,但这似乎只在进程正在运行时起作用
有什么想法吗?在我的例子中,gdb和ps的输出显示了相同的信息
root 3976 0.0 0.0 1636 640 tty6 Ss+ 08:00 0:00 /sbin/mingetty tty6
pmap也显示相同的1636
3976: /sbin/mingetty tty6
00110000 4K r-x-- [ anon ]
001c3000 100K r-x-- /lib/ld-2.5.so
001dc000 4K r-x-- /lib/ld-2.5.so
001dd000 4K rwx-- /lib/ld-2.5.so
001e0000 1256K r-x-- /lib/libc-2.5.so
0031a000 8K r-x-- /lib/libc-2.5.so
0031c000 4K rwx-- /lib/libc-2.5.so
0031d000 12K rwx-- [ anon ]
08048000 12K r-x-- /sbin/mingetty
0804b000 4K rw--- /sbin/mingetty
08dd3000 132K rw--- [ anon ]
b7f69000 8K rw--- [ anon ]
b7f79000 4K rw--- [ anon ]
bff4d000 84K rw--- [ stack ]
total 1636K
这是gdb信息过程映射
(gdb) info proc mappings
process 3976
cmdline = '/sbin/mingetty'
cwd = '/'
exe = '/sbin/mingetty'
Mapped address spaces:
Start Addr End Addr Size Offset objfile
0x110000 0x111000 0x1000 0x110000 [vdso]
0x1c3000 0x1dc000 0x19000 0 /lib/ld-2.5.so
0x1dc000 0x1dd000 0x1000 0x19000 /lib/ld-2.5.so
0x1dd000 0x1de000 0x1000 0x1a000 /lib/ld-2.5.so
0x1e0000 0x31a000 0x13a000 0 /lib/libc-2.5.so
0x31a000 0x31c000 0x2000 0x139000 /lib/libc-2.5.so
0x31c000 0x31d000 0x1000 0x13b000 /lib/libc-2.5.so
0x31d000 0x320000 0x3000 0x31d000
0x8048000 0x804b000 0x3000 0 /sbin/mingetty
0x804b000 0x804c000 0x1000 0x2000 /sbin/mingetty
0x8dd3000 0x8df4000 0x21000 0x8dd3000
0xb7f69000 0xb7f6b000 0x2000 0xb7f69000
0xb7f79000 0xb7f7a000 0x1000 0xb7f79000
0xbff4d000 0xbff62000 0x15000 0xbff4d000 [stack]
你能显示更多关于这个过程的信息吗?我刚刚尝试了
维护信息部分
,我得到了稍微大一点的,但数量相似的1817528字节。