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

tun*_*une 5 c++ solaris core crash-dumps

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

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

Ans*_*hul 5

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

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

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

也:

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

通过此操作,您可能会了解应用程序使用的内存。

  • 正如您所写,coredump_filter是特定于Linux的,因此不适用于Solaris。这里的等效项是coreadm。 (2认同)

jll*_*gre 5

是的,核心文件代表崩溃发生时进程使用的整个虚拟内存区域的转储。具有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