織夢(mèng) 去掉我的網(wǎng)站培訓(xùn)總結(jié)
文章目錄
- 嵌入式設(shè)備常用性能和內(nèi)存調(diào)試指令
- 內(nèi)存問題分析
- 性能測(cè)試
- android設(shè)備通過NDK 使用SimplePerf 抓取火焰圖
- 嵌入式linux抓取特定進(jìn)程的perf火焰圖
- 雜記
嵌入式設(shè)備常用性能和內(nèi)存調(diào)試指令
內(nèi)存問題分析
安裝valgrind,按照如下指令執(zhí)行應(yīng)用程序:
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --undef-value-errors=no --log-file=log ./可執(zhí)行程序名
結(jié)束以后可以查看當(dāng)前路徑下的log文件分析是否存在內(nèi)存泄漏。
性能測(cè)試
android設(shè)備通過NDK 使用SimplePerf 抓取火焰圖
- 確認(rèn)python版本是3.10+, 下載并解壓NDK
https://googledownloads.cn/android/repository/android-ndk-r26d-linux.zip
- 抓取指定進(jìn)程的perf.data
cd android-ndk-r26d\simpleperf
python app_profiler.py --pid <pid> -o perf.data -r "-f 1000 --call-graph dwarf -e cpu-cycles -g --duration 3"
注意: 這里 是要抓取perf數(shù)據(jù)的進(jìn)程pid,–duration 3 里的3指的是抓取3秒,可以自己調(diào)整.
3. 生成perf的html文件
python report_html.py -i perf.data -o perf.html
- 修改 HTML 文件
生成的perf.html
的頭是國外網(wǎng)址,國內(nèi)可能無法打開,使用下面的頭替換perf.html
的頭內(nèi)容即可。
<html><head><link rel="stylesheet" type="text/css" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.1.2/css/bootstrap.min.css"></link>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css"></link>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.1.2/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js"></script>
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script>google.charts.load('current', {'packages': ['corechart', 'table']});</script>
<style type="text/css">.colForLine { width: 50px; }.colForCount { width: 100px; }.tableCell { font-size: 17px; }.boldTableCell { font-weight: bold; font-size: 17px; }</style>
</head>
<body><script>
嵌入式linux抓取特定進(jìn)程的perf火焰圖
進(jìn)入嵌入式設(shè)備執(zhí)行如下指令:
sudo perf record -e branch-misses --call-graph fp -s -T --sample-cpu -F 100 -p <target_pid> \-o /tmp/perf.data --all-user -g -- sleep <duration>
perf script -i /tmp/perf.data > /tmp/perf.unfold
注意:target_pid 為目標(biāo)進(jìn)程的pid, duration為抓取的時(shí)間
這樣會(huì)在單板的/tmp
路徑下面生成perf.data
和perf.unfold
文件
然后將這兩個(gè)文件拉取到PC本地,然后使用本地的perf倉庫工具生成火焰圖:
./perf/FlameGraphTools/FlameGraph/stackcollapse-perf.pl ./perf.unfold > perf.folded./perf/FlameGraphTools/FlameGraph/flamegraph.pl ./perf.folded > perf.svg
這樣就可以得到火焰圖perf.svg
雜記
使用sshpass免輸入密碼操作scp和ssh:
sshpass -p <password> ssh root@198.168.31.12
sshpass -p <password> scp root@198.168.31.12:/tmp/perf.unfold .
password 為的登陸密碼。