織夢 去掉我的網站培訓總結
文章目錄
- 嵌入式設備常用性能和內存調試指令
- 內存問題分析
- 性能測試
- android設備通過NDK 使用SimplePerf 抓取火焰圖
- 嵌入式linux抓取特定進程的perf火焰圖
- 雜記
嵌入式設備常用性能和內存調試指令
內存問題分析
安裝valgrind,按照如下指令執(zhí)行應用程序:
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --undef-value-errors=no --log-file=log ./可執(zhí)行程序名
結束以后可以查看當前路徑下的log文件分析是否存在內存泄漏。
性能測試
android設備通過NDK 使用SimplePerf 抓取火焰圖
- 確認python版本是3.10+, 下載并解壓NDK
https://googledownloads.cn/android/repository/android-ndk-r26d-linux.zip
- 抓取指定進程的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ù)的進程pid,–duration 3 里的3指的是抓取3秒,可以自己調整.
3. 生成perf的html文件
python report_html.py -i perf.data -o perf.html
- 修改 HTML 文件
生成的perf.html
的頭是國外網址,國內可能無法打開,使用下面的頭替換perf.html
的頭內容即可。
<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抓取特定進程的perf火焰圖
進入嵌入式設備執(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 為目標進程的pid, duration為抓取的時間
這樣會在單板的/tmp
路徑下面生成perf.data
和perf.unfold
文件
然后將這兩個文件拉取到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 為的登陸密碼。