我有一个非常独特的问题,我在一个基于Octeon硬件的特殊硬件上运行Linux。我看到我的进程在执行特定操作时会一直分配内存。我想跟踪哪部分代码正在进行此调用。我如何跟踪内存分配?
这里是我的环境
- 的Octeon MIPS架构32位的细节。
- Linux内核2.6
- 最小的Linux实现。
但是,这是我需要解决的选项/限制。
- 不知道是否创建我自己的malloc会有所帮助。如果这是可能的,有人可以解释一下吗?
- 不能使用像walgrind这样的工具,不适用于此体系结构。代码库非常庞大,完全不了解它,因此复查并不可行和快速。
- strace给了我分配的内存地址,但我怎么才能找出创建它的代码?
请建议是否有办法解决这个问题。
非常感谢。
另外一件我忘记提到的,该进程的虚拟内存增加到1.4GB,在此之后,它停止,并且我看到代码中的分配失败,并带有ENOMEM。这是1.4 GB的限制与32位机器有关吗? AFAIU 32位机器应该允许每个进程3 GB的虚拟内存不是吗?此外,没有每个进程的限制,我已经用setrlimit/getrlimit证实了这一点。
干杯, 帕
该代码是否为x86编译?然后你可以在那里使用valgrind并至少捕获非平台特定的泄漏。 – Torp
感谢您的回复Torp,代码确实针对x86进行编译,但是这不能在x86平台上重现。只有在Octeon上,我可以看到strace弹出很多大量的mmap2调用,指示发生了一些内存分配。当我在x86上运行相同的用例时,我根本看不到mmap2调用。 – PavanMysore