加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:42:08 所属栏目:Linux 来源:网络整理
导读:我正在编写一个用于核心转储分析的工具,我想要打印的一件事是估算进程在转储时使用了多少虚拟内存.这些核心转储可能是由于崩溃造成的,或者可以使用gcore手动获取(例如,用于大小调整).基本上,我想打印相当于PS VSZ列. 我已经研究过readelf和gdb,并专注于后者.
我正在编写一个用于核心转储分析的工具,我想要打印的一件事是估算进程在转储时使用了多少虚拟内存.这些核心转储可能是由于崩溃造成的,或者可以使用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.然后我写了一个快速脚本,解析信息目标输出并总结地址范围,我得到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 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 info proc映射

(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]

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读