QPM 效能監控元件《總篇》

2021-09-11 21:18:50 字數 3933 閱讀 5628

經過了好幾個月的方案調研,不斷的優化,以及內部版本迭代與測試,目前已經趨於穩定。在北京2023年 gdg 活動中分享了該效能優化元件,並且內部做過深一層次的分享與**,將大家需要的功能,外加整理,只為更方便的服務於廣大 android 開發者。現在 qpm 官宣開源啦: github.com/zhuoketeam/…

歡迎各位 star, 不管你是有什麼樣光怪陸離想法或者創意,都非常期待。盡情的 issue 和 pr,雖然不能完全的滿足,但是我們會盡力。

獲取手機常用的基本資訊 (是否 root, 版本號,wifi, 硬體資訊等等)。

ui介面卡不卡,就看 fps(綠色表示正常,紅色表示卡頓)。

輕鬆獲取當前執行的 activity 名字,快速在**中定位當前介面。

監控 h5 頁面,可以判斷出白屏時間資源請求時間

螢幕錄製,解決某些場景下無法復現問題的流程。

輪子已經有了,幹嘛還要再造乙個輪子呢? 其實不然,雖然有了輪子,但是這個輪子和我的車型號不匹配嘛,無法發揮到極致。於是參考輪子的大體框架,改造成屬於我們自己的輪子。貼個花邊,換個螺絲釘,弄個小號的。哈哈哈,最後終於弄出了乙個簡易版本,但是太粗糙了,我們自己都不想用。

突然接手乙個老專案,啥都不太了解,雖然 ui 介面卡卡的,但是不能輕易優化,萬一優化後,背鍋咋弄?就先這樣吧,直到某一天老大說卡的不行啦,必須優化。好吧,那就慢慢優化吧。可是心裡總沒譜,怎麼樣算優化好呢? 沒個啥指標的,還真不好弄。假如有乙個工具可以告訴我哪些介面卡? 卡到什麼程度,優化之後可以達到什麼樣的效果,該多好呀。在某些手機上有系統自帶的 fps 指標,可是其他手機沒有嘛,總不能用該手機作為評判標準吧。

必須可以!

每天重複著同樣的工作,周而復始,枯燥乏味,因此衍生出了自動化操作,比如指令碼,工具等,讓人們可以把時間節省下來,做更多的事情。

抓包: charles,fiddler, wireshark;

android studio: ddms, logcat;

android studio 中 profiler 的 記憶體,流量,cpu;

android 手機中開發者選項裡面有很多輔助***。

這些工具都有乙個前提,很多都需要手機連線資料線,再開啟工具才能使用,如果客戶手機有問題,也如此的話,比較費心費力。對於未 root 的手機要拿到一些資訊,著實不易。

可以,但是業務測試和需求每天都很多, 測試同學沒空,沒精力去測試這方面的效能。除非有專業的效能測試團隊,每天負責檢測。手機發熱,介面卡頓都需要監控起來。

讓我們來嘗試做一些可以視覺化的懸浮窗功能吧,裡面可以展示一些基礎的效能指標資料。

乙個 apk 會有乙個固定的包名,但是在某些特殊場景下,卻會展示多個包名,例如:測試包,正式包,變種包,推送測試包等等,給 qpm 展示當前應用的包名,在某些時候可以方便我們定位問題。舉個例子:我們之前一直在測試推送包,有時候需要切換到正式包,在兩個包中切換各種rd,st環境,最後我都不記得我用的什麼包,只能解除安裝了,重新安裝。qpm 的懸浮窗可以直接展示當前應用的包名,看一眼就知道了,其實也可以把當前程序+執行緒號列印出來,方便開發同學分析問題。

試想,做了5年的專案,交給新來你接手?或者同事離職,丟下一堆坑,需要你來填坑。根據**梳理流程後,也不一定能立刻接手,如果根據頁面找activity,乙個字————累!

如果能直接展示當前介面的 activity 名字,是不是更容易一些呢?

介面怎麼這麼卡啊,快優化下。懵逼的你可能會想這要從**入手?先從介面渲染,還是從業務角度? 關鍵是我們需要知道在頁面的什麼場景下會出現問題,有乙個直觀指標就容易判斷了。當 cpu 到達 200% 的時候,記憶體劇增,那肯定有問題,可以用效能工具對該頁面詳細的分析。 一般先看看在該介面的 cpu 和 記憶體是否異常,再結合業務邏輯把相關的資料提前或者延遲獲取,減少同一時刻併發獲取,從而減少主介面卡頓。

這是什麼鬼?還記得曾經的老大說要復用執行緒,別單獨搞麼。如果你發現 200 多個執行緒,那你就得考慮下是否需要執行緒池了。這裡可以依據現有邏輯來處理,並非絕對性的。

還記得剛學 activity 那會兒麼,activity的 四種 launchmode,這裡可以記錄乙個棧裡面的 activity 的順序。方便你直觀了解棧中的情況。

網路情況如何? 比方說我用的是 wifi, 在某些角落網速很差,甚至沒流量資料,我們都希望可以了解。

基於 android 5.0 的 api,錄製整個螢幕,方便大家復現某些關於操作記錄的問題。

需要配合相應的設定,我們就可以在 webview 中對任何乙個網頁進行非同步檢測,例如獲取當前頁面位址,首頁白屏載入時間,以及每個資源的請求時間,和請求資源位址。非常容易。

以下的乙個唯一標識,表示乙個 item, 如果要新增多個,可以把唯一標示設定為不同的。

qpmmanager.getinstance().showbigtext(flag, bigtext); 第乙個引數 flag 是唯一標示, 第二個 bigtext 是自定義懸浮窗中顯示的所有文字資料。

qpmmanager.getinstance().showkeyvalue(flag, key, value); 第乙個引數 flag 是唯一標示, 第二個 key 是自定義懸浮窗中顯示的 key 值,第三個是 懸浮窗中的 value 值。

qpmmanager.getinstance().showkeypic(flag, key, picres); 第乙個引數 flag 是唯一標示, 第二個 key 是自定義懸浮窗中顯示的 key 值,第三個是 懸浮窗中的 pic res 中的資源值。

qpmmanager.getinstance().showcustom(flag,qpmtemplatecustomrenderer); 第乙個引數 flag 是唯一標示, 第二個 qpmtemplatecustomrenderer 是自定義懸浮窗中你們要自己新增的布局,可以寫乙個類,繼承自qpmtemplatecustomrenderer,實現裡面的方法,懸浮窗上就可以顯示對應的內容。

手機的基本資訊

androidmanifest.xml 資訊

可配置的開關

網路介面

再也不用 去手機的複雜介面檢視各種資料;

再也不用 因為某些資訊沒有,查詢半天。

是否 root, sdk 版本,手機型號,網路,名稱,ip,mac 位址,螢幕解析度,cpu 架構等等資訊。遇到關鍵的資料,還能複製。

這裡獲取的資料更全面

root 手機我們直接通過 檔案管理器 可以直接檢視 sp 檔案。

如果沒有 root 呢? 笨辦法,通過除錯**或者 log 列印輸出。

極大提公升程式設計師們的開發效率。

我們提供的了這些基礎功能,開啟開關後,可以直接在懸浮窗展示相關資料資訊。

自我控制聚焦點,只關注需要的資訊。

所有的開關,可以開啟,關閉,對於某些影響效能的操作,可以關閉其他所有的東西,保留關注的指標。

每乙個開關都可以長按開關名稱的這一條,上下移動位置,調整開關的順序。

請求方式;

返回狀態碼;

請求時長;

請求大小;

返回資料大小

需要 okhttp,然後可以獲取網路請求的所有資料,包括請求 request header,request response,response等資料。

關注的資料太多會佔滿螢幕,可以開啟精簡模式,預設顯示開關列表最頂部的兩個選項。開關列表可以通過拖動把選項位置移動到想要的前兩項。

qpm 的懸浮窗如果開啟過多的功能,可能會影響效能,推薦:需要什麼功能,就開啟什麼開關,這樣把影響降低到最低。

與其他同類 qpm 工具相比,有以下優勢:

內建多個引數指標開關,想用哪個就開哪個;

精簡模式,只顯示關注的資料指標;

螢幕錄製;

h5頁面效能監控;

四大元件的展示,並可以直接跳轉到對應的 activity 中;

sharedpreferences 檔案直接瀏覽和修改相應的 key 值;

通過 okhttp 展示相關的網路請求資訊;

請給 qpm  乙個 star 吧!

QPM 效能監控元件 總篇

經過了好幾個月的方案調研,不斷的優化,以及內部版本迭代與測試,目前已經趨於穩定。在北京2018年 gdg 活動中分享了該效能優化元件,並且內部做過深一層次的分享與 將大家需要的功能,外加整理,只為更方便的服務於廣大 android 開發者。現在 qpm 官宣開源啦 歡迎各位 star,不管你是有什麼...

MySQL監控 效能分析 工具篇

mysql越來越被更多企業接受,隨著企業發展,mysql儲存資料日益膨脹,mysql的效能分析 監控預警 容量擴充套件議題越來越多。工欲善其 事,必先利其器 那麼我們如何在進行mysql效能分析 監控預警 容量擴充套件問題上得到更好的解決方案,就要利用各種工具來對mysql各種指標進行分 析。本文是...

MySQL監控 效能分析 工具篇

mysql越來越被更多企業接受,隨著企業發展,mysql儲存資料日益膨脹,mysql的效能分析 監控預警 容量擴充套件議題越來越多。工欲善其 事,必先利其器 那麼我們如何在進行mysql效能分析 監控預警 容量擴充套件問題上得到更好的解決方案,就要利用各種工具來對mysql各種指標進行分 析。本文是...