全志平臺Tina系統內存調試的方法(valgrind、pmap、手工釋放內存)

全志平臺Tina系統內存調試的方法(valgrind、pmap、手工釋放內存)

以R18 yocto爲例

 

valgrind

valgrind是個開源的工具,可以用來檢查內存泄露等,全志平臺上有移植,官網地址:

 http://valgrind.org/downloads/current.html#current

 

valgrind使用方法:

1.在.bb文件裏把 valgrind配置上:

yocto/sources/meta-tina/recipes-core/images$ git diff .
diff --git a/recipes-core/images/image-tulip-mozart-chromium.bb b/recipes-core/i
index b7663b1..940c7ef 100644
--- a/recipes-core/images/image-tulip-mozart-chromium.bb
+++ b/recipes-core/images/image-tulip-mozart-chromium.bb
@@ -23,6 +23,7 @@ base_install = " \
        fake-hwclock \
        crash-handler \
        opkg \
+       valgrind \
 "

 

2.把yocto/build/conf/local.conf下的BB_NO_NETWORK設置爲0

BB_NO_NETWORK = "0"

 

3.設備端命令行:

valgrind --log-file=/tmp/valgrind.log --tool=memcheck --leak-check=full SampleApp /etc/avs/AlexaClientSDKConfig.json /etc/avs/ DEBUG9

sample-wakeup /etc/avs/config.json

即把命令sample-wakeup /etc/avs/config.json放到valgrind裏跑

 

不過跑的時候發現這個demo在valgrind裏跑會一直over run報錯:

info: AlsaUtils.cpp(fetch,140): hw:sndac1082003b,0, overrun occurred
info: AlsaUtils.cpp(fetch,140): hw:audiocodec,0, overrun occurred
error: InterleavedConvertor.cpp(convert,111): input param error, data: 0x66be800, samples: 0
 

應該是因爲valgrind本身也吃內存拖慢了進程造成的

 

pmap

pmap查看進程的內存映像信息(report memory map of a process)

 

1.ps查看進程號

2.pmap -d 1437

......

0000007fa0dfc000      24 r---- 00000000000bd000 0b3:00005 libsampleapp.so
0000007fa0e02000       4 rw--- 00000000000c3000 0b3:00005 libsampleapp.so
0000007fa0e03000       4 rw--- 0000000000000000 000:00000   [ anon ]
0000007fa0e04000     116 r-x-- 0000000000000000 0b3:00005 ld-2.26.so
0000007fa0e23000      32 rw-s- 0000000000000000 000:00006 pcmC1D0p
0000007fa0e2b000       4 rw-s- 0000000000000000 000:00005   [ shmid=0xf0000 ]
0000007fa0e2c000       8 rw--- 0000000000000000 000:00000   [ anon ]
0000007fa0e2e000       4 r---- 0000000000000000 000:00000   [ anon ]
0000007fa0e2f000       4 r-x-- 0000000000000000 000:00000   [ anon ]
0000007fa0e30000       4 r---- 000000000001c000 0b3:00005 ld-2.26.so
0000007fa0e31000       4 rw--- 000000000001d000 0b3:00005 ld-2.26.so
0000007fa0e32000       4 rw--- 0000000000000000 000:00000   [ anon ]
0000007fcb296000     132 rw--- 0000000000000000 000:00000   [ stack ]
mapped: 2546816K    writeable/private: 489532K    shared: 100K
最後一行的值
mapped:表示該進程映射的虛擬地址空間大小,也就是該進程預先分配的虛擬內存大小,即ps出的vsz
writeable/private:表示進程所佔用的私有地址空間大小,也就是該進程實際使用的內存大小      
shared:表示進程和其他進程共享的內存大小

 

手工釋放內存

echo 3 > /proc/sys/vm/drop_caches

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