android app内存分析,Android手机App内存占用测试方法
1.內存占用
對于智能手機而言,內存大小是固定的;因此,如果單個app的內存占用越小,手機上可以安裝運行的app就越多;或者說app的內存占用越小,在手機上運行就會越流暢。所以說,內存占用的大小,也是考量app性能的一個重要指標。
2.原理說明
對于一個app,我們可以關注它在3種狀態下的內存占用情況:
空負荷————app已經在后臺運行,但是用戶沒有使用;
中負荷————app在前臺運行,用戶進行了少量操作;
滿負荷————用戶持續頻繁大量操作,app接近飽和狀態運行。
然而,除了第一種情況,其它兩種的主觀性很強,不是很容易區分。正常產品測試的時候,只要驗證后臺運行(5~10分鐘為宜)和用戶持續頻繁大量操作(10~15分鐘為宜)這兩種情況下就可以了。
這樣一來,就變成了如何持續統計并記錄app所占內存的問題。Procrank工具可以實現這個功能。
如上圖所示,PID列顯示的是對應app的進程號cmdline列顯示的是對應app的包名(adb命令行下可以在"/data/data"目錄下查看到)。接下來對其它的列進行詳細說明。
通過procrank命令會從左到右依次列出Vss、Rss、Pss、Uss,并且對于同一個app進程而言,數值依次變小。
VSS————是單個進程全部可訪問的地址空間,其大小包括可能還尚未在內存中駐留的部分。比如地址空間已經被 malloc
分配,但是還沒有實際寫入;對于確定單個進程實際內存使用大小, VSS 用處不大。
RSS————是單個進程實際占用的內存大小,RSS 易被誤導的原因在于,
它包括了該進程所使用的所有共享庫的全部內存大小。對于單個共享庫,盡管無論多少個進程使用,實際該共享庫只會被裝入內存一次;因此,對于單個進程的內存使用大小,
RSS也不是一個精確的描述。
PSS————不同于RSS的是,PSS按比例包含了其所使用的共享庫大小;例如,三個進程使用同一個占用30內存頁的共享庫。對于三個進程中的任何一個,PSS將只包括其中的10個內存頁。PSS是一個非常有用的數字,因為系統中全部進程以整體的方式被統計,對于系統中的整體內存使用是一個很好的描述。如果一個進程被終止,其PSS中所使用的共享庫大小將會重新按比例分配給剩下的并且仍在使用該共享庫的進程。
USS————是單個進程的全部私有內存大小,亦即全部被該進程獨占的內存大小;
USS是一個非常非常有用的數字,因為它揭示了運行一個特定進程的真實的內存增量大小,如果進程被終止,USS就是實際被返還給系統的內存大小。USS
是針對某個進程開始有可疑內存泄露的情況,進行檢測的最佳數字。
3.測試方法
將已經被root的手機通過usb連接電腦;
進入procrank工具目錄,通過記事本編輯"procrank_pssuss.bat"文件,按照如下圖,設置procrank采樣時間間隔,然后保存關閉。
雙擊執行procrank_pssuss.bat文件,然后盡量快的操作手機app,讓目標app基本上處在滿負荷持續運行10~15分鐘;
停止procrank執行,收集的數據會被保存到執行日志會保存在procrank_pssuss.bat同級的目錄下面,名為procrank_xxxx.log,其中xxxx為執行時的年月日時分秒;
然后通過excel打開對應的log文件,篩選出對應被測app的記錄即可進行統計分析。
4.實例說明
通過Notepad++打開procrank工具生成的log文件;
通過搜索篩選出對應app的記錄行;
將搜索結果單獨拷貝到一個txt文本文件中;
正常情況下,如果進程的USS(或者PSS)值有波動,但是不會持續上升,在一定程度上說明app沒有內存泄露的問題,可以取一段時間內的平均值作為內存占用的測試結果;
5.特別說明
可能的消除誤差,這個過程最好重復5~10次,將測試結果取平均值;
正常情況下PSS(USS)的值應該維持在一個區間內波動,不會一直上升;如果該值存在一直上升的趨勢,說明存在內存泄露的可能。
總結
以上是生活随笔為你收集整理的android app内存分析,Android手机App内存占用测试方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 声网(agora)音视频通话sdk—微信
- 下一篇: android sina oauth2.