Linux 如何预测流程的规模';在用GDB生成核心文件之前?
如何根据例如Linux 如何预测流程的规模';在用GDB生成核心文件之前?,linux,debugging,memory,gdb,core,Linux,Debugging,Memory,Gdb,Core,如何根据例如/proc/pid/maps、/proc/pid/coredump\u filter、由top显示的值(如VIRT RES等)预测核心文件的大小 一般来说,核心文件的大小取决于什么,文件具体包含什么(虚拟地址空间的哪些部分?) 我对核心文件可能小于VIRT或/proc/pid/maps中所有内存范围的总和这一事实感到有点困惑,因此我怀疑该文件不完整 如何根据例如/proc/pid/maps、/proc/pid/coredump\u filter、top-like-VIRT-RES等显
/proc/pid/maps
、/proc/pid/coredump\u filter
、由top
显示的值(如VIRT RES
等)预测核心文件的大小
一般来说,核心文件的大小取决于什么,文件具体包含什么(虚拟地址空间的哪些部分?)
我对核心文件可能小于VIRT
或/proc/pid/maps
中所有内存范围的总和这一事实感到有点困惑,因此我怀疑该文件不完整
如何根据例如/proc/pid/maps、/proc/pid/coredump\u filter、top-like-VIRT-RES等显示的值来预测核心文件的大小
上限是/proc/$$/maps
中所有映射的总和。但是,通常只读映射不会保存在核心
中(假设在使用核心
时,映射的文件将以只读方式可用)
下限是/proc/$$/maps
中所有可写映射的总和。这是一个下限,因为内核通常也会转储可执行只读映射的第一页,这就是linkerBUILD\u ID
ELF note所在的位置。该注释允许GDB找到所使用的可执行文件或共享库的正确版本,即使系统已更新为较新版本core
还包含每个线程的寄存器转储。ELF格式本身也有一些开销
VIRT和RES通常不是一个好的估计值:VIRT“太大了”——它包含只读映射,以及mmap
ed到进程中但实际上没有被分页的页面。如果部分内存被调出,RES可能太小
我对核心文件可能小于VIRT或/proc/pid/maps中所有内存范围的总和这一事实感到有点困惑,因此我怀疑该文件不完整
如上所述,core
小于VIRT
,并且/proc/pid/maps
中所有内存范围的总和是正常和预期的
最后,如果你真的希望在实际倾倒内核之前找到一个相当精确的估计,你可能希望研究谷歌