我正在检查一个进程的高内存使用率。我得到了消耗高内存的进程地址-
sudo less /proc/12345/smaps我得到了这个内存使用率很高的数据段-
5555573e8000-555cba243000 rw-p 00000000 00:00 0 [heap]
Size: 30980460 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 30980412 kB
Pss: 30964728 kB
Shared_Clean: 0 kB
Shared_Dirty: 31368 kB
Private_Clean: 0 kB
Private_Dirty: 30949044 kB
Referenced: 30980412 kB
Anonymous: 30980412 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB接下来,我想看看内存位置5555573e8000-555cba243000是什么
我把核心转储文件
gcore -o /tmp/dump 12345我想知道5555573e8000-555cba243000地址如何映射到核心转储中的地址?在核心转储中,我没有看到地址5555573e8000。核心转储中地址具有较小的数字,如下所示
5555573e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................发布于 2021-05-14 06:40:27
我想知道地址5555573e8000-555cba243000如何映射到核心转储中的地址?
您希望查看readelf -Wl /tmp/dump的输出,该输出应类似于:
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
NOTE 0x000510 0x0000000000000000 0x0000000000000000 0x001448 0x000000 0
LOAD 0x002000 0x0000561f0fa7e000 0x0000000000000000 0x001000 0x001000 R 0x1000
LOAD 0x003000 0x0000561f0fa7f000 0x0000000000000000 0x000000 0x001000 R E 0x1000
LOAD 0x003000 0x0000561f0fa80000 0x0000000000000000 0x000000 0x001000 R 0x1000
LOAD 0x003000 0x0000561f0fa81000 0x0000000000000000 0x001000 0x001000 R 0x1000
...从那里找到覆盖5555573e8000虚拟地址的LOAD段,您将得到它的文件偏移量。
https://stackoverflow.com/questions/67525577
复制相似问题