如何在 Linux 上使用核心转储和 gdb 估算已使用的虚拟内存 (VSZ)?
我正在编写一个用于核心转储分析的工具,我想打印的一件事是估计转储时进程使用了多少虚拟内存。这些核心转储可能是由于崩溃造成的,也可能是使用 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 ,但这似乎只有在进程正在运行时才有效。
有什么想法吗?
I'm writing a tool for core dump analysis and one thing I'd like to print is an estimate of how much virtual memory the process was using at the time of the dump. These core dumps could be due to crashes or could be manually taken using gcore (e.g. for sizing). Essentially, I'd like to print the equivalent of the PS VSZ column.
I've looked into readelf and gdb and have focused on the latter. For example, I've got a simple program that just hangs and I see in 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
I take a core using gcore, at which point it's using 4,206,592 bytes VSZ. Then I wrote a quick script that parses info target
output and sums the address ranges and I get 1,814,528 bytes. I also tried info proc mappings
but that seems to only work if the process is running.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我的例子中,gdb 和 ps 的输出显示相同的信息
pmap 也显示相同的信息 1636
这是 gdb 信息 proc 映射
你能显示有关该过程的更多信息吗?
In my case the output of gdb and ps shows the same info
pmap also show the same 1636
Here's gdb info proc mapping
Can you show more info about the process?