這個工具我第一次看到是在填坑群裡面看到,是由研發-北京-藍星同學分享的,看到比較有趣,就寫一篇相關的記錄下用法
火焰圖裡面也可以定位記憶體方面的問題,那個是通過一段時間的統計,以乙個彙總的方式來檢視內存在哪個地方可能出了問題
本篇是另外乙個工具,這個工具的好處是有很清晰的圖表操作,以及基於時間線的統計,下面來看下這個工具怎麼使用的
本篇對具體的記憶體函式的呼叫占用不會做更具體的分析,這裡是提供乙個工具的使用方法供感興趣的研發同學來使用
目前大多數的ceph執行在centos7系列上面,筆者的環境也是在centos7上面,所以以這個舉例,其他平台同樣可以
需要用到的工具
安裝valgrind
yum install valgrind
massif-visualizer是資料視覺化的工具,由於並沒有centos的發行版本,但是有fedora的版本,從網上看到資料說這個可以直接安裝忽略掉需要的依賴即可,我自己跑了下,確實可行
wget
安裝massif-visualizer
rpm -ivh massif-visualizer-0.4.0-6.fc23.x86_64.rpm --nodeps
不要漏了後面的nodeps
停掉需要監控的osd(例如我的是osd.4)
[root@lab8106 ~]# systemctl stop ceph-osd@4
開始執行監控
[root@lab8106 ~]# valgrind --tool=massif /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
==21522== massif, a heap profiler
==21522== command: /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph
==21522==
==21522==
starting osd.4 at :/0 osd_data /var/lib/ceph/osd/ceph-4 /var/lib/ceph/osd/ceph-4/journal
2017-08-10 16:36:42.395682 a14d680 -1 osd.4 522 log_to_monitors
監控已經開始了,在top下可以看到有這個程序執行,占用cpu還是比較高的,可能是要抓取很多資料的原因
等待一段時間後,就可以把之前執行的命令ctrl+c掉
在當前目錄下面就會生成乙個【massif.out.程序號】的檔案
[root@lab8106 ~]# ll massif.out.21522
-rw------- 1 root root 142682 aug 10 16:39 massif.out.21522
[root@lab8106 ~]# ms_print massif.out.21522 |less
這個方式是文字方式的檢視,也比較方便,自帶的文字分析工具,效果如下:
首先在windows上面執行好xmanager-passive,這個走的x11**的(也可以用另外乙個工具mobaxterm)
執行好了後,直接在xshell命令列執行
[root@lab8106 ~]# massif-visualizer massif.out.21522
massif-visualizer(22494)/kdeui (kdelibs): attempt to use qaction "toggledatatree" with kxmlguifactory!
massif-visualizer(22494)/kdeui (kdelibs): attempt to use qaction "toggleallocators" with kxmlguifactory!
description: "(none)"
command: "/usr/bin/ceph-osd -f --cluster ceph --id 4"
time unit: "i"
snapshots: 56
peak: snapshot # 52 after "2.3138e+09i"
peak cost: "16.2 mib" heap "749.0 kib" heap extra "0 b" stacks
然後在windows上面就會彈出下面的
就可以互動式的檢視快照點的記憶體占用了,然後根據這個就可以進行記憶體分析了,剩下的工作就留給研發去做了
linux – 如何測量應用程式或程序的實際記憶體使用情況?
只有分析落地到資料層面,這樣的分析才是比較精準的
whywho
when
建立武漢-運維-磨渣
2017-08-10
STL 如何釋放vector占用的記憶體
c stl中vector的相關問題,呼叫clear時,內部是如何具體實現的?若想將其記憶體釋放,該如何操作?假設我們先定義乙個容器x vectorx 100 這樣首先會申請 100 sizeof int 的記憶體大小。呼叫clear函式僅僅是將資料清除,而申請的記憶體還是存在的,並沒有釋放掉。可以呼...
如何讓udhcpc 占用更少的記憶體?
這個問題的表面現象是用system 呼叫的方式執行udhcpc 會失敗。解釋 由於system 是 通過fork 實現的,而子程序會複製父程序的vm 空間,當父程序占用較多vm 空間,很容易導致system 呼叫失敗。其本質是子程序分配vm 空間失敗導致的。解決方法 執行一下 echo 1 proc...
如何優化listview控制項的記憶體占用
inform下需要每隔幾秒向listview中寫入一行資料 每行10列 實測記憶體增長非常明顯,大約每分鐘增加0.1m 由於程式需要長期穩定執行,請教下如何優化記憶體問題。舊的資料可以捨棄,但優先考慮保留以方便檢視,另外刪除舊的行會導致行號變動,從而後台執行緒中對某一行的操作錯誤。不能向控制項裡邊插...