2009-02-18 80 views
10

Linux中是否有任何可用圖形或文本顯示程序內存使用情況的工具?例如,如果我編寫一個C++程序並想驗證是否正確地在內存中分配和釋放對象,是否有可用的應用程序可視化地顯示正在實例化和刪除的對象?當我在Visual Studio中編程時,我記得單步執行一個程序並使用調試窗格來監視內存使用情況,並且正在尋找類似於Linux中的內容。在Linux中監視程序的內存使用情況

回答

10

這不完全是你正在尋找,但看看Valgrind

+0

好的建議。看起來像一個非常有用的工具! – Chris 2009-02-19 01:16:55

3

我通常運行top以關注整體內存使用情況。

0

conky(screenshots)是一款非常簡單的計算機資源查看器,可在桌面壁紙上張貼。我一直關注內存使用和特定程序的使用。

2

確定進程在支持虛擬內存的操作系統上使用多少內存確實很困難。

問題不在於它使用了多少內存,而是多少是私有的,多少共享。

你可以看看/ proc/pid/maps或/ proc/pid/smaps(也許)。這些文件只會告訴你該進程映射到其地址空間的內存量,而不是它使用的內存量,並且絕對不會與系統中的其他進程共享多少內存。

甚至可以共享「私人」地圖,因爲fork()在寫入時進行復制,所以私人頁面仍然可以與其他一些(相關 - 通常是父級或兄弟)進程共享。而且,已經映射但從未使用的頁面根本不會消耗空間。

可以看到每個映射的RSS(Resident Set Size),但只能告訴你有多少常駐(在RAM中,而不是交換到交換文件,尚未分配或尚未需求 - 從一個映射文件加載),現在共享多少和什麼。

我想你最好的選擇是計算私人匿名記憶的數量,在某些情況下這可能是好的。

2

1)首先運行

ps -u <your user id> 

2)獲取等你想從1個輸出)來監視進程的PID

3)然後運行

top -p <the pid of the process you want to monitor> 
3
while (/proc/<pid>/status) 
echo "VMSize: `ps -p <pid> -o vsize=`" >> ! mem.out 
pstack <pid> >> mem.out 
sleep 10 
end 

grep VMSize mem.out | awk -F':' '{print $2}' | sort -r -n | head -1會給你記憶力高峯。

還可以使用mem.out查看內存佔用量和當前堆棧相關性。

相關問題