【发布时间】:2012-01-30 22:02:26
【问题描述】:
我正在编写一个用于核心转储分析的工具,我想打印的一件事是估计转储时进程使用了多少虚拟内存。这些核心转储可能是由于崩溃造成的,也可能是使用 gcore 手动获取的(例如,用于调整大小)。本质上,我想打印 PS VSZ 列的等效项。
我研究了 readelf 和 gdb 并专注于后者。例如,我有一个简单的程序,它只是挂起,我在 PS 中看到:
$ 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 获取核心,此时它使用 4,206,592 字节 VSZ。然后我编写了一个快速脚本来解析info target 输出并对地址范围求和,得到 1,814,528 字节。我也试过info proc mappings,但这似乎只有在进程正在运行时才有效。
有什么想法吗?
【问题讨论】:
-
我刚刚尝试了
maintenance info sections,我得到了一个稍大但相似的 1,817,528 字节数。