文章插圖

文章插圖
整理下Android內存優化常用的幾種工具,top命令、adb shell dumpsys meminfo、Memory Profiler、LeakCanary、MAT
1. top
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況 。
查看top命令的用法
$ adb shell top --helpusage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]Show process activity in real time.-HShow threads-kFallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)-oShow FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)-OAdd FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)-sSort by field number (1-X, default 9)-bBatch mode (no tty)-dDelay SECONDS between each cycle (default 3)-mMaximum number of tasks to show-nExit after NUMBER iterations-pShow these PIDs-uShow these USERs-qQuiet (no header lines)Cursor LEFT/RIGHT to change sort, UP/DOWN move list, space to forceupdate, R to reverse sort, Q to exit.復制代碼使用top命令顯示一次進程信息,以便講解進程信息中各字段的含義^[[41;173RTasks: 754 total,1 running, 753 sleeping,0 stopped,0 zombieMem:5.5G total,5.4G used,165M free,76M buffers Swap:2.5G total,789M used,1.7G free,2.4G cached800%cpu 100%user3%nice54%sys 641%idle0%iow3%irq0%sirq0%hostPID USERPRNI VIRTRESSHR S[%CPU] %MEMTIME+ ARGS15962 u0_a89410 -10 6.6G 187M76M S 75.63.28:16.55 asia.bluepay.cl+785 system-2-8 325M13M 7.6M S 29.70.284:03.91 surfaceflinger25255 shell20035M 2.7M 1.6M R 21.60.00:00.16 top -n 1739 system-3-8 177M 3.6M 2.2M S 10.80.016:00.36 android.hardwar+16154 u0_i908610 -10 1.3G40M19M S5.40.60:46.18 com.google.andr+13912 u0_a8720017G 197M86M S5.43.423:56.88 com.tencent.mm24789 rootRT-2000 D2.70.00:01.36 [mdss_fb0]24704 root200000 S2.70.00:01.20 [kworker/u16:12]20096 u0_a943010 6.1G 137M53M S2.72.30:31.45 com.xiaomi.mark+ 2272 system18-2 8.7G 407M 267M S2.77.1 191:11.32 system_server744 systemRT0 1.3G 1.6M 1.4M S2.70.072:22.41 android.hardwar+442 rootRT0000 S2.70.05:59.68 [cfinteractive]291 root-30000 S2.70.05:00.17 [kgsl_worker_th+10 root200000 S2.70.01:55.84 [rcuop/0]7 root200000 S2.70.02:46.82 [rcu_preempt]25186 shell20034M 1.9M 1.4M S0.00.00:00.71 logcat -v long +25181 root200000 S0.00.00:00.00 [kworker/2:3]25137 root200000 S0.00.00:00.00 [kworker/1:3]25118 system200 5.2G83M54M S0.01.40:01.05 com.android.set+24946 u0_a57200 5.1G60M37M S0.01.00:00.82 com.xiaomi.acco+復制代碼第 1 行:進程信息總共(total):754個運行中(running)狀態:1個休眠(sleeping)狀態:753個停止(stopped)狀態:0個僵尸(zombie)狀態:0個第 2 行:內存信息5.5G total:物理內存總量5.4G used:使用中的內存量165M free:空閑內存量76M buffers: 緩存的內存量第 3 行:Swap分區信息2.5G total:交換區總量789M used:使用的交換區大小1.7G free:空閑交換區大小2.4G cached:緩沖的交換區大小內存監控時,可以監控swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是內存不夠用了 。
第 4 行:CPU信息800%cpu:8核cpu100%user:用戶進程使用CPU占比3%nice:優先值為負的進程占比54%sys:內核進程使用CPU占比641%idle:除IO等待時間以外的其它等待時間占比0%iow:IO等待時間占比3%irq:硬中斷時間占比0%sirq:軟中斷時間占比第 5 行及以下:各進程的狀態監控PID:進程idUSER:進程所屬用戶PR:進程優先級NI:nice值,負值表示高優先級,正值表示低優先級VIRT:進程使用的虛擬內存總量,VIRT=SWAP+RESRES:進程使用的、未被換出的物理內存大小,RES=CODE+DATASHR:共享內存大小S:進程狀態%CPU:上次更新到現在的CPU占用時間比%MEM:使用物理內存占比TIME+:進程時間的CPU時間總計,單位1/100秒ARGS:進程名2. dumpsys meminfo
首先了解下Android中最重要的四大內存指標的概念
dumpsys meminfo命令展示的是系統整體內存情況,內存項按進程進行分類
$ adb shell dumpsys meminfoApplications Memory Usage (in Kilobytes):Uptime: 168829244 Realtime: 1465769995// 根據進程PSS占用值從大到小排序Total PSS by process:272,029K: system (pid 2272)234,043K: com.tencent.mm (pid 13912 / activities)185,914K: com.android.systemui (pid 13606)107,294K: com.tencent.mm:appbrand0 (pid 5563)101,526K: com.tencent.mm:toolsmp (pid 9287)96,645K: com.miui.home (pid 15116 / activities)...// 以oom來劃分,會詳細列舉所有的類別的進程Total PSS by OOM adjustment:411,619K: Native62,553K: [email protected] (pid 730)21,630K: logd (pid 579)16,179K: surfaceflinger (pid 785)...272,029K: System272,029K: system (pid 2272)361,942K: Persistent185,914K: com.android.systemui (pid 13606)37,917K: com.android.phone (pid 2836)23,510K: com.miui.contentcatcher (pid 3717)...36,142K: Persistent Service36,142K: com.android.bluetooth (pid 26472)101,198K: Foreground72,743K: com.miui.securitycenter.remote (pid 4125)28,455K: com.android.settings (pid 30919 / activities)338,088K: Visible96,645K: com.miui.home (pid 15116 / activities)46,939K: com.miui.personalassistant (pid 31043)36,491K: com.xiaomi.xmsf (pid 4197)...47,703K: Perceptible17,826K: com.xiaomi.metoknlp (pid 4477)10,748K: com.lbe.security.miui (pid 5097)10,528K: com.xiaomi.location.fused (pid 4563)8,601K: com.miui.mishare.connectivity (pid 4227)13,088K: Perceptible Low13,088K: com.miui.analytics (pid 19306)234,043K: Backup234,043K: com.tencent.mm (pid 13912 / activities)22,028K: A Services22,028K: com.miui.powerkeeper (pid 29762)198,787K: Previous33,375K: com.android.quicksearchbox (pid 31023)23,278K: com.google.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0 (pid 16154)171,434K: B Services45,962K: com.tencent.mm:push (pid 14095)31,514K: com.tencent.mobileqq:MSF (pid 12051)22,691K: com.xiaomi.mi_connect_service (pid 22821)...538,062K: Cached107,294K: com.tencent.mm:appbrand0 (pid 5563)101,526K: com.tencent.mm:toolsmp (pid 9287)72,112K: com.tencent.mm:tools (pid 9187)...// 按內存的類別來進行劃分Total PSS by category:692,040K: Native328,722K: Dalvik199,826K: .art mmap129,981K: .oat mmap126,624K: .dex mmap124,509K: Unknown92,666K: .so mmap68,189K: Dalvik Other53,491K: .apk mmap44,104K: Gfx dev28,099K: Other mmap24,960K: .jar mmap7,956K: Ashmem3,700K: Stack3,368K: Other dev450K: .ttf mmap4K: Cursor0K: EGL mtrack0K: GL mtrack0K: Other mtrack// 手機整體內存使用情況Total RAM: 5,862,068K (status normal) Free RAM: 3,794,646K (538,062K cached pss + 3,189,244K cached kernel +0K cached ion +67,340K free) Used RAM: 2,657,473K (2,208,101K used pss +449,372K kernel) Lost RAM:487,987KZRAM:219,996K physical used for826,852K in swap (2,621,436K total swap)Tuning: 256 (large 512), oom322,560K, restore limit107,520K (high-end-gfx)復制代碼查看單個進程的內存信息,命令如下adb shell dumpsys meminfo [pid | packageName]復制代碼我們查看下微信的內存信息$ adb shell dumpsys meminfo com.tencent.mmApplications Memory Usage (in Kilobytes):Uptime: 169473031 Realtime: 1466413783** MEMINFO in pid 13912 [com.tencent.mm] **PssPrivatePrivateSwapPssHeapHeapHeapTotalDirtyCleanDirtySizeAllocFree------------------------------------------Native Heap519875192406193115904413933519708Dalvik Heap74302742728263320917018459424576 Dalvik Other10136101360290Stack848408Ashmem2000Gfx dev8808880800Other dev15601560.so mmap998498474368493.jar mmap142805600.apk mmap2942010080.ttf mmap1221010640.dex mmap313024430004528.oat mmap268802320.art mmap27922352403334Other mmap693227526320Unknown4247423247493TOTAL293721155588411448471036821432392944284 App SummaryPss(KB)------Java Heap:76664Native Heap:51924Code:41332Stack:84Graphics:8808Private Other:17920System:96989TOTAL:293721TOTAL SWAP PSS:84710 ObjectsViews:623ViewRootImpl:1AppContexts:9Activities:1Assets:12AssetManagers:0Local Binders:198Proxy Binders:183Parcel memory:46Parcel count:185Death Recipients:125OpenSSL Sockets:1WebViews:0 SQLMEMORY_USED:156PAGECACHE_OVERFLOW:13MALLOC_SIZE:117 DATABASESpgszdbszLookaside(b)cacheDbname42846721/26/4/data/user/0/com.tencent.mm/databases/Scheduler.db Asset Allocations: 409K: 12K: 1031K復制代碼App Summary各項指標解讀如下,通常我們需要重點關注Java Heap和Native Heap的大小,如果持續上升,有可能存在內存泄露 。Memory Profiler是 Android Profiler 中的一個組件,實時圖表展示應用內存使用量,識別內存泄露和抖動,提供捕獲堆轉儲,強制GC以及跟蹤內存分配的能力 。
Android Profiler官方文檔
4. Leak Canary
非常好用的內存泄露檢測工具,對于Activity/Fragment的內存泄露檢測非常方便 。
Square公司開源 官網地址,原理后面單獨分析 。
5. MAT
MAT是Memory Analyzer tool的縮寫,是一個非常全面的分析工具,使用相對復雜點 。關于安裝和配置有很多很好的文章結束,這里就不單獨講了,后面分析具體案例 。
Android 內存優化篇 – 使用profile 和 MAT 工具進行內存泄漏檢測
使用Android Studio和MAT進行內存泄漏分析
【內存修改器安卓版下載 內存修改器安卓吾愛破解】內存問題高效分析方法接入LeakCanary,監控所有Activity和Fragment的釋放,App所有功能跑一遍,觀察是否有抓到內存泄露的地方,分析引用鏈找到并解決問題,如此反復,直到LeakCanary檢查不到內存泄露 。adb shell dumpsys meminfo命令查看退出界面后Objects的Views和Activities數目,特別是退出App后數目為否為0 。打開Android Studio Memory Profiler,反復打開關閉頁面多次,點擊GC,如果內存沒有恢復到之前的數值,則可能發生了內存泄露 。再點擊Profiler的垃圾桶圖標旁的heap dump按鈕查看當面內存堆棧情況,按包名找到當前測試的Activity,如果存在多份實例,則很可能發生了內存泄露 。對于可疑的頁面dump出內存快照文件,轉換后用MAT打開,針對性的分析 。觀察Memory Profiler每個頁面打開時的內存波峰和抖動情況,針對性分析 。開發者選項中打開“不保留后臺活動”,App運行一段時間后退到后臺,觸發GC,dump內存快照 。MAT分析靜態內容是否有可以優化的地方,比如圖片緩存、單例、內存緩存等 。
- 修復存儲卡的手機軟件 內存卡修復工具手機版下載
- 手機助手安卓版哪個好用 手機助手軟件哪個最好
- lol皮膚修改器怎么用不了了 Lol皮膚修改器
- 內存診斷工具有用嗎F1選項是什么 內存診斷工具有什么用
- 內存卡修復軟件哪個好 內存卡修復器
- WiFi快速破解器安卓版 wifi快速破解器安卓版 v1.2.5
- mts轉換mp4軟件 mts轉換mp4軟件安卓版
- 電腦ip修改器 電腦ip地址修改器哪個好用
- 單機 修改器 單機電腦游戲修改器
- qq修改器怎么用? qq修改器怎么用怎么開啟守護進程
