我有一個非常獨特的問題,我在一個基於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