微信小遊戲開發、測試、現網三階段的內存調優工具使用指南:包含微信開發者工具,微信Android性能面板,PerfDog,小遊戲雲測試和小遊戲性能助手等工具。html
-java
在開發微信小遊戲的過程當中,開發者每每會遇到不少內存問題,如內存泄漏或者內存溢出等。對目前幾款微信創意小遊戲進行測試發現,微信小遊戲運行時的異常Crash可能是因爲內存佔用過多形成的。爲了方便開發者調優小遊戲內存,本文從開發、測試與現網不一樣階段介紹咱們常見的內存分析與調優工具。
web
爲了能讓開發者掌握遊戲的運行性能數據,小遊戲框架底層會對現網玩家進行必定機率的採樣,採樣量能夠經過趨勢數據勾選獲得。須要上報性能數據的玩家會以必定時間間隔(目前爲1分鐘)上報數據,所以該數值能比較準確地反應玩家真實的遊戲體驗狀況。最終這些數值會呈如今小遊戲數據助手提供的「性能分析「板塊。
咱們能夠在左圖」概況「中看到總體的內存均值與遊戲因內存產生的內存異常退出率,在右圖「運行性能」中看到在不一樣檔次的機型下的內存均值與內存異常退出率。
值得注意的是,在iOS下小遊戲與微信客戶端是處於同進程,所以二者總內存達到OOM閾值(如上圖)時很是容易被系統KILL掉,所以開發者須要格外注意內存的使用量。
經過分析,咱們發現許多小遊戲在iOS的內存異常退出率偏高(尤爲是低端機),若是你發現本身的小遊戲也存在這樣的現象,那麼很大機率存在內存問題而致使大批玩家流失,接下來須要趕忙着手優化小遊戲的內存使用。正則表達式
開發過程當中,爲了方便開放者定位和調試所研發的微信小遊戲的內存問題,本文推薦三款內存調試工具:chrome
若是想要詳細瞭解微信開發者工具下的Performance和Memory的所有功能,參考 Chrome Performance 和 Chrome Memory。
截圖取自微信開發者工具和 Chrome Performance。
爲了更方便清晰地分析內存問題,建議開發者在引擎端導出微信小遊戲項目時,選中「調試模式」。
使用Performance的錄製步驟以下圖所示(勾選上Performance
下的ScreenShots和Memory,見下圖黃褐色框區域):
小程序
錄製完成後會獲得以下圖所示的結果,對結果按照下文給出的方式進行分析。Performance中共有4個區域,起到不一樣的做用,接下來分別介紹。
數組
包含FPS、CPU、NET、ScreenShots、HEAP五部分。其中:瀏覽器
NET對應區域2中的Network。每一個彩色條表明一個資源。條越長,檢索資源所花費的時間越長。每一個欄的淺色表明等待時間(從請求資源到下載第一個字節之間的時間)。深色部分表示傳輸時間(下載第一個字節和最後一個字節之間的時間)。
條的顏色編碼以下:緩存
包括Network、Frame、Interactions、Main、GPU、Chrome_childIOThread和Compositor等七個部分,內存問題重點關注Network和Main。微信
在上述三個窗口中選中不一樣的區域,該窗口呈現不一樣的統計結果。
分析內存時主要關注JS Heap數據及其曲線。
如上圖,曲線顏色和上方複選框的顏色保持一致,如JS Heap是藍色,Listeners是暗黃色。曲線顯示了五組數據的曲線圖,分別是JS Heap(JS 堆內存),Documents(DOM樹根節點數量),Nodes(節點數),Listeners(監聽器數量)和GPU Memory。
禁用複選框能夠從圖表中隱藏該類別。
點擊JS Heap曲線時,Main中會定位到對應的執行函數,對於分析內存變化頗有幫助。
開發者工具中的Memory能夠幫助你:
Memory的Profiles一共有三種類型:
Heap snapshot: 顯示了當前時刻頁面上的js 對象和對應的DOM節點。
Allocation instrumentation on timeline: 以時間軸的形式展示出來的js heap。
Allocation sampling: JS heap的採樣,多用於長時間的記錄。(本文不做介紹)
此外,還能夠採用Performance中的memory的方式來獲取內存信息,其記錄的js heap與memory基本一致,可是有一點須要注意的是, Heap snapshot記錄的是乾淨的內存(GC後的),而Performance中記錄的內存並不必定通過了GC。
Heap snapshot 有 Summary、Comparison、Containment和Statistics四種視圖。
以下圖所示:其中
經過將多個快照相互比較來查找存在差別的對象。爲了驗證某個應用程序操做不會形成泄漏(例如,一般是一對直接和反向操做,例如打開一個文檔,而後關閉它,不會留下任何垃圾),您能夠遵循如下情形:
本質上是應用程序對象結構的「鳥瞰圖」。能夠經過它查看函數閉包內部,觀察組成JavaScript對象的VM內部對象,以及瞭解應用程序在很是低的級別使用了多少內存。
該視圖提供了幾個入口點:
錄製時,請注意「分配時間軸」上是否有藍色條狀顯示,以下面的屏幕截圖所示。
這些藍色條表示新的內存分配。能夠縮放欄以篩選「Constructor」 窗格,以僅顯示在指定時間範圍內分配的對象。
展開對象,而後單擊其值查看有關它的更多詳細信息。
微信Android端自身集成了三種內存分析工具,分別是性能監控面板、Heap Snapshot、V8-CPU-Profile。開發者可經過三者監控Android真機環境下各性能指標。
經過此工具,開發者能夠監控Android真機環境下的各個內存指標的實時變化。
微信 Android 7.0.7 版本及以上,微信爲小遊戲開發版和體驗版提供了性能監控面板,能夠經過膠囊按鈕-開發調試-打開性能監控面板打開,效果以下圖所示:
開發者可經過在Android真機中實時地監控整個遊戲過程當中的各項資源的變化,更直接地定位和發現內存問題。
開發者能夠監控不一樣內存的佔用狀況,經過不一樣內存的變化趨勢來判斷是否有內存泄漏的狀況,各個指標含義以下:
名稱
含義
summary.native-heap
native 內存
summary.system
系統內存
summary.total-swap
總 swap 內存
summary.graphics
顯存
summary.java-heap
java 內存
summary.total-pss
總內存
summary.private-other
其餘私有內存
summary.code
靜態代碼,資源內存
summary.stack
棧內存
"內存"指總內存,其值與summary.total-pss保持一致。
微信 Android 7.0.7 版本及以上,微信爲小遊戲開發版和體驗版提供了Heap 內存快照的能力,一樣是在膠囊按鈕中打開,選擇開發調試中的 Take Heap Snapshot,在界面彈出以下圖所示的提示後,從手機中的提示的位置把 Heap Snapshot 拷貝到電腦上。
以後在微信開發者工具中的調試器的 Memory 中,Load 拷貝出的Heap Snapshot 文件,就能夠查看 V8 的內存快照了,效果以下圖所示:
各個參數信息和使用說明詳見 PerfDog使用說明;
本節只精簡地介紹使用PerfDog 進行內存定位的操做。
在本文中,PerfDog的做用在於 :
(1)追蹤內存變化的場景,幫助快速定位到內存異常的場景。
(2)從宏觀角度觀察微信小遊戲運行時整體內存變化趨勢,分析小遊戲內存的可優化空間。
Step 3:在微信小遊戲的各個場景中進行遊戲操做,觀察右側Memory Usage的變化。
iOS設備下Memory Usage各字段以下。在下列指標中,定位內存問題重點關注Memory指標。
Memory :統計FootPrint,是測試過程當中重點觀察的指標。
注1:PerfDog暫時在iOS九、10系統沒法獲取該字段,其餘版本可正常使用。如作性能測試,建議升級iOS系統版本。
注2:OOM與FootPrint有關,與系統、機型無關。只與RAM有關,如1G內存機器。FootPrint超過650MB,引起OOM。
Xcode Memory :XCode Debug gauges統計方式。
注:PerfDog暫時在iOS九、10系統沒法獲取該字段,其餘版本可正常使用。如作性能測試,建議升級iOS系統版本。
Real Memory:Xcode Instrument統計方式,指實際佔用物理內存。
注:該指標與物理內存系統策略有關,衡量內存指標時不會關注,可是它有助於分析和定位總體性能問題。好比:Memory沒有下降,說明應用沒有釋放內存,可是Real Memory卻下降了,說明系統對內存作了壓縮。因爲壓縮會佔用CPU資源,相應會致使FPS下降。
注1: Android設備須要開啓手機USB調試模式及容許USB應用安裝
注2:針對Android設備有兩種模式,非安裝模式和安裝模式。
a. 非安裝模式(推薦):手機即插即用,無需任何設置及安裝,使用很是簡單,但手機屏幕上沒有實時性能數據顯示。測試時,PerfDog會彈框警告,但不影響使用,警告信息以下:
b. 安裝模式:須要在手機上自行安裝PerfDog.apk,手機屏幕上有實時性能數據顯示(須要容許USB應用安裝和PerfDog懸浮窗管理權限),啓動PC端PerfDog,則會在手機上自動PUSH安裝PerfDog.apk,具體安裝相似各個手機廠商安裝第三方APP提示安裝便可。(注:因爲不少手機安裝須要帳號密碼,致使沒法自動安裝,若是自動安裝失敗,則會把安裝文件PerfDog.apk釋放到當前文件夾裏,手動安裝PerfDog.apk便可)。此模式下,在測試過程當中,可能因爲系統資源緊缺會kill PerfDog顯示app(手機界面性能數據顯示),但不影響正常測試功能。
Step 3: 在微信小遊戲的各個場景中進行遊戲操做,觀察右側Memory Usage的變化。
Android設備下微信小遊戲與微信處於不一樣進程,須要在PerfDog中選取小遊戲進程。選取小遊戲進程方式以下圖所示:鼠標放置在區域「1」上,會彈出右側浮動框,其中深色區域是當前微信內活躍的進程。若是此時微信正在運行小遊戲,則該進程爲微信小遊戲進程。點擊深色進程,即選中了小遊戲進程。此時觀察該進程的Memory 變化便可。
Android設備下Memory Usage各字段以下。在下列指標中,定位內存問題重點關注Memory指標。
Memory: PSS Memory,統計結果和Android Java API標準結果一致,與Meminfo也一致。
注:部分三星機器系統修改了Meminfo底層統計方式,致使Meminfo與Java AP統計結果不一致,新出三星機器已修復。
小遊戲雲測試:小遊戲雲測試是微信小遊戲團隊爲開發者提供的一套完整易用的在線測試服務,以幫助開發者更高效、更全面地進行自動化遊戲性能測試、兼容性測試,驅動產品質量提高和優化,爲用戶帶來更佳的遊戲體驗。具有高覆蓋率的真機設備集羣、低成本接入門檻和持續集成性能、兼容性檢測工具等特色。
歡迎參與內測
點擊上圖中的內存報告按鈕。
能夠看到內存概覽、內存分佈、內存Top列表和內存數據詳情等多種統計數據。
在「場景概覽」或者「測試設備列表」中選擇一臺設備,點擊「查看詳情」或者「詳細報告」,便可進入該設備下的雲測試結果。
在詳細報告中有多個指標,內存分析可關注內存指標曲線,以下圖:
由於Android和iOS系統緣由,內存指標曲線上在上述兩個系統中得到的具體指標有所差別。
支持操做: