移動應用性能收集工具原理解析

性能收集分析相關工具總覽

? 收集、分析、展示移動應用性能數據的工具很多,大致可以分為如下幾類。例如可收集多項性能指標的移動性能工具,perfdog,Solopi,其中Solopi開源,pefdog商業工具。可進行Crash分析的工具,例如商業的Firebase Crashlytics和開源的Sentry工具。如果需要對網絡相關數據進行分析,可以使用Charles或者Wireshark。除此之外,還有綜合性的性能管理工具,例如Dynatrace等。總體來說,商業工具能力,準確性,用戶體驗肯定強于開源工具,作為個人學習研究,更多只有從開源工具出發。所以,此篇博客在編寫中,也會以開源工具進行舉例。

移動端性能測試工具
PerfDog:用于監控應用性能、CPU、內存、電量消耗等數據的工具,支持移動應用的性能測試和實時監控。
Solopi:專注于移動應用性能的測試和監控,包括幀率、CPU、內存等指標的實時監測。

Crash分析工具
Firebase Crashlytics:Google提供的強大的崩潰報告和分析工具,可實時監控應用的崩潰情況。
Sentry:開源的錯誤追蹤工具,支持多種平臺,包括移動應用的錯誤報告和性能監控。

網絡性能測試工具
Charles Proxy:網絡調試代理工具,可以捕獲和分析移動應用的網絡請求和響應數據。
Wireshark:開源的網絡分析工具,支持捕獲和分析移動應用的網絡數據包。

APM工具(應用性能管理):
Dynatrace:云原生的全棧性能監控解決方案,支持移動應用性能監控和用戶體驗分析。

收集哪些性能指標以及如何收集

? 進行性能分析前,首先要明白每個性能指標含義,以solopi收集的性能指標為例,我們來展開看看移動應用性能常見指標,以及可以通過哪些方式收集這些指標。

幀率

? 幀率的計算公式是:幀率=繪制的幀數/時間段,大多數應用程序和游戲開發者的目標幀率是60FPS(幀/每秒),為什么目標幀率是60FPS呢?因為大多數現代智能手機和平板電腦的屏幕刷新率為60Hz,所以,只要幀率達到60FPS,即每秒繪制的幀數是60,那么用戶視覺效果就比較流暢,不會有卡頓的感覺。最低不能低于30FPS,這是因為顯示器在等待新的幀時,重復顯示上一幀的圖像,導致畫面不流暢。高的可以達到90FPS(例如,對于高刷新頻率的設備而言)。

如何收集幀率信息

? 收集幀率的方式有兩種,一種是利用Choreographer類統計幀率,這種需要在應用內部寫代碼實現,只能收集該應用的幀率信息。另外一種方式是使用gfxinfo工具。以Solopi為例,也是通過gfxinfo工具信息計算1秒內超時幀時間,從而反推出實際幀率,所以在接近靜止的情況下, 部分幀率可能顯示有誤。推薦在滑動或頁面切換等動態場景下進行幀率測試。gfxinfo的方式,可以收集所有應用的幀率信息,非常適合做性能數據收集工具,所以,這里,也重點介紹如何通過gfxinfo收集幀率信息。

? 收集幀率信息主要有兩個步驟,步驟一:通過adb命令獲取gfxinfo信息,步驟二:對信息進行解析,計算得出幀率信息。gfxinfo信息內容大致如下所示:

Stats since: 統計開始時間,單位為納秒。
Total frames rendered: 總渲染幀數。
Janky frames: 卡頓幀數,即超過16ms(每秒60幀的刷新間隔)的幀數。
Janky frames percentage: 卡頓幀占比,即卡頓幀數與總幀數的比例。
90th percentile: 90分位數,表示90%的幀的渲染時間低于該值(以毫秒為單位)。
95th percentile: 95分位數,表示95%的幀的渲染時間低于該值(以毫秒為單位)。
99th percentile: 99分位數,表示99%的幀的渲染時間低于該值(以毫秒為單位)。
Number Missed Vsync: 未同步垂直同步次數,即由于未能及時渲染而導致的丟幀次數。
Number High input latency: 高輸入延遲次數,表示輸入事件處理時間過長而導致的延遲次數。
Number Slow UI thread: UI線程響應緩慢次數,即UI線程處理時間過長的次數。

以Solopi為例子,就是通過gfxinfo信息中的超時幀時間,來反推幀率的,具體項目的代碼可以查看solopi source code。

卡頓率/卡頓次數

卡頓次數:在測試周期內,檢測到幀率低于閾值的時間段數。每當幀率低于閾值并持續一段時間,就計為一次卡頓。這里的閥值,可以進行自定義設置,例如低于目標幀率60FPS,就可以記為一次卡頓。即幀渲染時間大于16ms,就計算為卡頓。

卡頓率:卡頓時間占總測試時間的百分比。假設在一次測試中,應用運行了120秒,期間總共有4次幀率低于16 FPS的情況,總計卡頓時間為8秒,那么:卡頓次數:4次。卡頓率:8/120*100%=6.7%。在上面的gfxinfo中,也有卡頓率的數據信息。

cpu/內存

? 以solopi為例,cpu是包含應用頂層Activity所在進程的CPU占用百分比與全局CPU占用百分比,對于單進程應用,該數據表示該應用的CPU占用情況;對于多進程進程應用,該數據表示頂層UI進程的CPU占用情況,當發生進程切換時,Soloπ能夠自動切換到新的進程數據。

? 以solopi為例,內存包含應用頂層Activity所在進程的PSS(Proportional Set Size,即實際使用內存)內存、Private Dirty(私有內存)內存與全局占用內存,對于單進程應用,該數據表示該應用的內存占用情況;對于多進程進程應用,同CPU一樣,Soloπ也支持自動切換頂層進程。
如何統計cpu和內存信息呢?
有兩種方式統計cpu和內存信息,方式一:直接讀取/proc/<pid>/stat文件來獲取進程的 CPU 時間,或者,直接讀取/proc/<pid>/statm 文件獲取進程的內存統計信息。方式二:通過adb shell命令獲取內存和cpu使用信息。以Android設備為例,現在已經關閉了直接讀取文件的口子,所以,通常情況下,是使用adb命令來獲取內存,cpu信息。
?下面是通過adb命令獲取內存使用信息的示例代碼。在執行adb命令的時候,要保證adb具有root權限。可以通過adb root命令將ADB daemon提升為Root權限。
import subprocessdef get_memory_info(pid):try:# Run adb shell command to read /proc/<pid>/statmcommand = f"adb shell cat /proc/{pid}/statm"result = subprocess.check_output(command, shell=True)statm_data = result.decode('utf-8').strip().split()# Parse statm datasize, resident, shared, text, lib, data, dt = map(int, statm_data)memory_info = {'size': size,         # total program size (pages)'resident': resident, # resident set size (pages)'shared': shared,     # shared pages (pages)'text': text,         # text (code) size (pages)'lib': lib,           # library (unused since Linux 2.6; always 0)'data': data,         # data + stack (pages)'dt': dt              # dirty pages (unused since Linux 2.6; always 0)}return memory_infoexcept subprocess.CalledProcessError as e:print(f"Error executing command: {e}")return Noneexcept Exception as e:print(f"Error: {e}")return None# Replace with your application's PID
pid = '12345'
memory_info = get_memory_info(pid)
if memory_info:print(f"Memory info for PID {pid}:")print(f"Size: {memory_info['size']} pages")print(f"Resident set size (RSS): {memory_info['resident']} pages")print(f"Shared pages: {memory_info['shared']} pages")print(f"Text (code) size: {memory_info['text']} pages")print(f"Data + stack size: {memory_info['data']} pages")

網絡

? 以solopi為例,網絡包含應用上下行速率與累計流量以及全局上下行速率與累計流量。屬于應用維度數據,具體數據如下圖所示:

如何獲取網絡數據?

? 獲取網絡數據和獲取cpu/內存數據一樣,可以直接讀取/proc/pid/net/dev文件獲取網絡數據,或者通過adb命令獲取(命令:adb shell cat /proc/pid/net/dev)。下圖是solopi部分源碼,可以看到這里統計了wlan0的網絡數據情況,具體邏輯可以查看solopi source code下面的NetworkTools.java代碼。當然,關于網絡流量統計,網上也提交了bug,因為這里grep wlan0,只統計了網絡wifi的流量,沒有統計到移動流量。bug詳細信息見這里。

響應時間

? 以solopi為例,包含應用點擊的響應耗時與刷新耗時數據。屬于應用維度數據。從用戶點擊開始,到系統第一次發出界面更新時間為響應耗時,到系統停止界面刷新的時間為刷新耗時。統計響應時間的邏輯是錄屏分幀,solopi官網介紹是實現了自動識別開始幀和結束幀來統計響應時間,實際使用solopi會發現,統計的頁面響應時間并不正確,例如用戶點擊開始,到點擊應用的頁面,這中間本身有人的手速操作時間在內,這部分被統計到響應時間里面了。所以,如果要計算準備的頁面響應時間,還是只有錄屏,人工識別頁面的開始、結束幀,會更準確。具體錄屏分幀的步驟如下所示:

? 以上就是對于移動應用中常見性能指標含義理解,以及如何收集詳細說明。關于crash等,會在后續博客中再詳細介紹。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43854.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

貓超卡怎么使用?

天貓超市卡好像只能買天貓的東西 但是有時候淘寶、京東打折比天貓的單價還便宜 這樣的話&#xff0c;貓超卡好像也沒多大用處 這不&#xff0c;上個月618湊單的東西比在天貓超市買劃算多了 最后我直接把貓超卡在收卡云上折現了&#xff0c;超劃算

Chmod 特殊權限舉例

chmod 4777 的例子&#xff1a; 比如&#xff0c;在安裝某些服務如PostgreSQL時&#xff0c;服務的初始化腳本&#xff08;如initdb&#xff09;可能需要以超級用戶(root)的權限運行&#xff0c;以執行一些系統級的操作。在這種情況下&#xff0c;如果你設置 initdb 腳本為 ch…

flink 大數據處理資源分配

Flink在大數據處理中的資源分配是一個復雜但至關重要的過程&#xff0c;它直接影響到作業的性能和穩定性。以下將從幾個方面詳細闡述Flink的資源分配機制和優化策略&#xff1a; 一、資源分配概述 Flink是一個用于無界和有界數據流處理的分布式計算框架&#xff0c;它通過集群…

Git-Updates were rejected 解決

Updates were rejected 1. 雜話2. 問題3. 解決3.1 拉去遠程的最新版本&#xff08;AC&#xff09;3.2 解決可能的沖突3.3 提交3.4 再次推送 1. 雜話 大伙兒應該都用過Git吧&#xff0c;具體是個啥東西我就不說了哈。之前我在用git push的時候遇到了這個報錯&#xff0c;我仔細思…

C/C++開發,IniFile源碼下載

C/C開發&#xff0c;IniFile源碼下載。 地址&#xff1a;CIniFile download | SourceForge.net

編程學單詞:delta(希臘字母Δ/δ)

希臘字母表的第四個字母&#xff0c;大寫為Δ&#xff0c;小寫為δ。 (筆記模板由python腳本于2024年07月11日 12:32:56創建&#xff0c;本篇筆記適合喜歡寫代碼&#xff0c;更喜歡鼓搗Python的coder翻閱) 【學習的細節是歡悅的歷程】 Python 官網&#xff1a;https://www.pyth…

算法 | NOIP1999 Cantor表

算法篇——Cantor的數表 - SteveWang - 博客園 (cnblogs.com) #include <bits/stdc.h> using namespace std; int high(int n) {return n*(n1)/2; } int main() {int k;cin>>k;int n1;while(1){if(high(n)>k){break;}n;} int mhigh(n);int wm-k1;if(n%20){cout…

Arcgis Api 三維聚合支持最新版API

Arcgis Api 三維聚合支持最新版API 最近有同學問我Arcgis api 三維聚合&#xff0c;官方還不支持三維聚合API&#xff0c;二維可以。所以依舊是通過GraphicLayers 類來實現&#xff0c;可支持最新Arcgis Api版本 效果圖&#xff1a;

k8s中Service暴露的種類以及用法

一、說明 在 Kubernetes 中&#xff0c;有幾種不同的方式可以將服務&#xff08;Service&#xff09;暴露給外部流量。這些方式通過定義服務的 spec.type 字段來確定。 二、詳解 1. ClusterIP 定義&#xff1a;默認類型&#xff0c;服務只能在集群內部訪問。 作用&#xff1a;通…

《計算機研究與發展》投稿經驗

前言 記錄下投計研展正刊的經驗。跟專刊不同哈&#xff0c;專刊會更快&#xff0c;我看好像也有專刊的經驗分享。【計算機研究與發展投稿記錄】 期刊簡介 來源計研展官網&#xff1a; 《計算機研究與發展》是中國科學院計算技術研究所和中國計算機學會聯合主辦的學術性期刊&a…

盲人出行體驗攻略:蝙蝠避障,點亮前行的明燈

在繁華喧囂的都市中&#xff0c;每一步都充滿了未知與挑戰&#xff0c;而對于盲人朋友們來說&#xff0c;出行更是一場無聲的冒險。他們憑借著內心的勇氣和堅韌的意志&#xff0c;在黑暗中摸索前行&#xff0c;每一步都承載著對生活的熱愛與追求。今天&#xff0c;我們要深入探…

FLStudio21.3.12中文破解版本安裝包win+mac電腦安裝包下載

&#x1f3a4; FL Studio 21中文版&#xff1a;音樂制作新寵&#xff0c;讓你的創作起飛&#xff01; 嗨&#xff0c;親愛的音樂創作者們&#xff01;&#x1f44b;今天要和大家分享一個讓我超級興奮的寶藏軟件——FL Studio 21中文版&#xff01;這不僅僅是一款音樂制作軟件&…

STM32串口工作原理

STM32的串口是相當豐富的&#xff0c;功能也很強勁。最多可提供5 路串口&#xff0c;有分數波特率發生器、支持單線光通信和半雙工單線通訊、支持LIN、智能卡協議和IrDA SIRENDEC 規范(僅串口3支持)、具有DMA等。 串口最基本的設置&#xff0c;就是波特率的設置。STM32的串口使…

移動應用穩定性測試

移動應用穩定性測試 使用Monkey等工具進行移動應用穩定性測試是一種常見的自動化測試方法。Monkey工具可以自動生成各種隨機事件來模擬用戶操作&#xff0c;從而測試應用在不同情況下的表現。在執行monkey命令后&#xff0c;主要觀察以下的結果信息來評估移動應用的穩定性。 崩…

前后端通信 —— HTTP/HTTPS

目錄 一、HTTP/HTTPS 簡介 1、HTTP 2、HTTPS 二、HTTP 工作過程 三、HTTP 消息 1、HTTP消息結構 2、HTTP消息示例 四、HTTP 方法&#xff08;常用&#xff09; 1、GET 2、POST 3、PUT 4、DELETE 5、GET與POST對比 五、HTTP 狀態碼&#xff08;常用&#xff09; …

常用的簡單的ps快捷鍵

常用快捷鍵&#xff1a; V移動工具 M矩形選框工具 W快速選擇工具 C裁剪工具 P鋼筆工具 T文字工具 U矩形工具 Z放大/縮放 altshiftctrls儲存為web格式的快捷鍵 altVE新建參考線 ctrlj 復制當前圖層 d 快速把前景色背景色變為黑白 x 切換前景色和背景色 ctrldelete 填充顏色 ct…

關于windows下編譯xLua插件的流程記錄

1.工程準備 1.xLua工程&#xff1a;GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 2.build_xlua_with_libs工程&#xff1a;GitHub - chexiongsheng/build_xlua_with_libs…

Onnx 1-深度學習-Operators

自動化測試-芯片神經網絡-模型ONNX-Operators 概念綜述一: Operators1> Conv2> MaxPool1. 參數2. shape 計算demo3> roipooling1. Roi-pooling 概念2. ROI pooling步驟3. demo4. R-CNN & Fast R-CNN二:維度變換1> Reshape-改變形狀1. 參數2. shape 計算demo3.…

實用調試技巧(Visual Studio)

目錄 Debug 和 Release 的區別 F10 --- 逐過程調試 & F11 --- 逐語句調試 F9 --- 新建/切換斷點 & F5 --- 開始調試 shift F5 & ctrl F5 Debug 和 Release 的區別 Debug&#xff1a;通常為調試版本&#xff0c;它包含調試信息&#xff0c;并且不作任何優化…

亞信科技基于 Apache SeaTunnel 的二次開發應用實踐

亞信科技在Apache SeaTunnel的實踐分享 自我介紹 各位同學好&#xff0c;很榮幸通過Apache SeaTunnel社區和大家進行分享交流。我是來自亞信科技的潘志宏&#xff0c;主要負責公司內部數據中臺產品的開發。 本次分享的主題是Apache SeaTunnel在亞信科技的集成實踐&#xff0c…