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

时间:2013-02-13 04:31:28

标签: c++ solaris core crash-dumps

我的应用程序(Sol 10 - 32位上的C ++)崩溃了,应用程序生成的核心大小为4 GB。我可以假设应用程序可能会在崩溃时使用高达4 GB的内存(与核心文件的大小相同)吗? PS。我的应用程序是独立的,不依赖于任何其他进程。

有没有办法检查应用程序使用的总内存,核心文件?

2 个答案:

答案 0 :(得分:4)

从联机帮助页(http://linux.die.net/man/5/core):

  

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

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

此外:

  

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

通过这个,您可以了解应用程序使用的内存。

答案 1 :(得分:2)

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

在Solaris下,您可以使用位于/ usr / proc / bin中的多个命令来从核心文件中获取信息,特别是:

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

您可以使用coreadm命令限制保存在核心文件中的数据集。默认情况下保存所有内容(堆栈+堆+ shm + ism + dism +文本+数据+ rodata + anon + shanon + ctf)。