6

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

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

4

2 回答 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

于 2013-02-13T07:09:43.537 回答
5

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

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

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

还:

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

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

于 2013-02-13T05:05:50.927 回答