Linux常見的內存分析工具

    隨着技術的日新月異,嵌入式軟件產品也逐漸往更高端, 運行更流暢方向發展。正常我們目前的手機產品,常見的基本都是32G,16G,已經很難在看到1G的內存了。即使如此我們還是會面臨內存不夠用導致系統慢的結果。本文將列出幾個我比較熟悉的內存分析的工具或者方法,讀者不妨可以嘗試使用以下。

1. system monitor圖像化界面

在ubuntu左上角點擊search your computerà輸入System MonitoràResources,便可以看到目前內存的使用情況。       

2. free

free命令一般顯示的是系統使用和空閒的內存.可以使用free -help查看使用方法

從上圖可以看到主要包含Mem和Swap,其中total表示全部的內存大小,used表示已經使用的內存大小, free表示剩下可以使用的內存大小,shared表示共享內存大小,一般用於進程間通信的, buffer是用於爲塊設備做緩存的,cache一般是指page cache用戶緩存打開的文件的(可以提高文件的訪問速度). 當系統內存短缺時會進行內存回收,其回收的部分主要在buffer/cache,但是這部分也不是全部可以回收的,比如共享的內存段,ram fs是不可以回收的,所以availabe 約等於free +buffer/cache.

3. top

top命令基本的信息描述在下圖中已標出,其中用紅色框標出的這裏重點說明一下.S表示的是進程的狀態, S表示Sleeping, R表示Running, D表示不可中斷的睡眠狀態,T表示trace跟蹤狀態,Z表示Zombie狀態. CPU和MEM表示CPU和MEM的佔用比.

處理之外還有一些交互的命令,輸入M將重排MEM按照從大到小,輸入P重排CPU從大到小,輸入T按照進程運行的時間排序,輸入m顯示內存的柱狀圖,輸入F/f可以配置輸出信息.

4 vmstat

具體的信息可以參考下圖中的說明,但是如果要循環看到如下的信息可以使用比如vmstat 2 10,表示2s抓取一次共抓取10次.

 

5. cat /proc/slabinfo 或者slabtop

就下圖而言,Ojects包含於slabs,slabs包含於caches,所以從歸屬關係來說Caches是最大的。從圖中可以得到目前系統的slab所消耗的內存大概爲153900K,在系統內存吃掉非常多的情況下我們便可以從其中查看是否有異常。

6. pmap

細心的朋友可能會發現,上述的種種工具都是從系統的角度出發的,那麼如果想查看某一個進程所吃掉的內存,該用什麼工具?這時候你就可以考慮使用pmap了,使用方法爲:

pmap PID

下面我用一個簡單的測試程序來示例:

當然除此之外還可以加上一些參數可以顯示更加詳細的信息,可以使用pmap -x PID or pmap -X PID

7.  dmesg

默認情況下dmesg顯示的log的時間戳是開機的時間,有的時候定位問題需要找到出問題時的點,着就會給研發工程師們帶來一定的困惑,這裏提供幾個小技巧,或許會有幫助.

可以看到,dmesg -T顯示的時間戳爲系統時間,dmesg -Td顯示系統時間並且會給出兩天相鄰log的差值.

下圖表示的是系統的具體內存系統,有一個node,4個zone以及地址空間範圍.其中包含2097005個page= 2097005 * 4KB = 8GB,正式測試電腦的內存大小.

其中的memap是用於存放struct page的,在後續的文章中會詳細介紹.

8. cat /proc/meminfo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章