核心文件的大小是否反映了应用程序崩溃时的内存使用情况?

问题描述 投票:0回答:2

我的应用程序(Sol 10 - 32 位上的 C++)崩溃了,应用程序生成的核心转储大小为 4 GB。我可以假设应用程序在即将崩溃时可能会使用高达 4 GB 的内存(与核心文件的大小相同)吗?

PS。我的应用程序是独立的,不依赖于任何其他进程。

有什么方法可以通过核心文件检查应用程序使用的总内存吗?

c++ solaris coredump crash-dumps
2个回答
6
投票

是的,核心文件代表崩溃发生时进程使用的整个虚拟内存区域的转储。对于 32 位进程,核心文件不能超过 4 GB。

在 Solaris 下,您可以使用位于

/usr/proc/bin
中的多个命令从核心文件中获取信息。特别是:

  • file core
    :将确认核心文件来自您的进程
  • pstack core
    :会告诉你进程崩溃的位置
  • pmap core
    :将显示每个地址的内存使用情况

您可以使用

coreadm
命令来限制核心文件中保存的数据集等。默认情况下,所有内容都会保存:
stack + heap + shm + ism + dism + text + data + rodata + anon + shanon + ctf


5
投票

来自手册页 (http://linux.die.net/man/5/core):

某些信号的默认操作是导致进程终止并生成核心转储文件,这是一个包含终止时进程内存映像的磁盘文件。

您的代码可能正在使用多线程环境和共享数据。

还有:

从内核2.6.23开始,Linux特有的/proc/PID/coredump_filter文件可用于控制在对具有相应进程ID的进程执行核心转储时将哪些内存段写入核心转储文件.

也许通过这个你可以了解应用程序使用的内存。

© www.soinside.com 2019 - 2024. All rights reserved.