如何在Linux上使用核心转储和gdb来近似使用虚拟内存(VSZ)?

如何在Linux上使用核心转储和gdb来近似使用虚拟内存(VSZ)?,第1张

概述我正在编写一个用于核心转储分析的工具,我想要打印的一件事是估算进程在转储时使用了多少虚拟内存.这些核心转储可能是由于崩溃造成的,或者可以使用gcore手动获取(例如,用于大小调整).基本上,我想打印相当于PS VSZ列. 我已经研究过readelf和gdb,并专注于后者.例如,我有一个简单的程序,只是挂起,我在PS中看到: $ps auxwww | grep a.outUSER PI 我正在编写一个用于核心转储分析的工具,我想要打印的一件事是估算进程在转储时使用了多少虚拟内存.这些核心转储可能是由于崩溃造成的,或者可以使用gcore手动获取(例如,用于大小调整).基本上,我想打印相当于PS VSZ列.

我已经研究过readelf和gdb,并专注于后者.例如,我有一个简单的程序,只是挂起,我在PS中看到:

$ps auxwww | grep a.outUSER       PID %cpu %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot     16644  0.0  0.0   4108   472 pts/5    S+   13:51   0:00 ./a.out

我使用gcore取核心,此时它使用4,206,592字节的VSZ.然后我写了一个快速脚本,解析信息目标输出并总结地址范围,我得到1,814,528字节.我也尝试了info proc映射,但这似乎只有在进程运行时才有效.

有任何想法吗?

解决方法 在我的例子中,gdb和ps的输出显示相同的信息

root      3976  0.0  0.0   1636   640 tty6     Ss+  08:00   0:00 /sbin/mingetty tty6

pmap也显示相同的1636

3976:   /sbin/mingetty tty600110000      4K r-x--    [ anon ]001c3000    100K r-x--  /lib/ld-2.5.so001dc000      4K r-x--  /lib/ld-2.5.so001dd000      4K rwx--  /lib/ld-2.5.so001e0000   1256K r-x--  /lib/libc-2.5.so0031a000      8K r-x--  /lib/libc-2.5.so0031c000      4K rwx--  /lib/libc-2.5.so0031d000     12K rwx--    [ anon ]08048000     12K r-x--  /sbin/mingetty0804b000      4K rw---  /sbin/mingetty08dd3000    132K rw---    [ anon ]b7f69000      8K rw---    [ anon ]b7f79000      4K rw---    [ anon ]bff4d000     84K rw---    [ stack ]total     1636K

这是gdb info proc映射

(gdb) info proc mapPingsprocess 3976cmdline = '/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]

您能否显示有关该流程的更多信息?

总结

以上是内存溢出为你收集整理的如何在Linux上使用核心转储和gdb来近似使用虚拟内存(VSZ)?全部内容,希望文章能够帮你解决如何在Linux上使用核心转储和gdb来近似使用虚拟内存(VSZ)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1029423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存