Android 中檢視記憶體的使用情況集常用adb命令
當程式執行垃圾回收的時候,會列印一條Log資訊,其格式如下:
D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memory_stats>, <Pause_time>
GC_Reason表示導致垃圾回收的原因以及當前的回收型別,包括以下幾類:
GC_CONCURRENT:當堆中物件數量達到一定是觸發的垃圾收集
GC_FOR_MALLOC:在記憶體已滿的情況下分配記憶體,此時系統會暫停程式並回收記憶體
GC_HPROF_DUMP_HEAP:建立FPFOR檔案來分析Heap時所造成的垃圾收集
GC_EXPLICIT: 程式呼叫了垃圾收集函式System.gc
GC_EXTERNAL_ALLOC: 出現在API 10及以下,為外部分配記憶體(native memory or NIO buffer)所造成的垃圾回收,高版本全部分配在Dalvik Heap中。
Amount_freed 表示此次回收的記憶體
Heap_stats 表示空閒記憶體百分比和存活物件大小/堆的總大小
External_memory_stats 表示API 10及以下的外部分配記憶體,已分配記憶體/導致垃圾回收的界限
Pause_time 暫停時間,一個表示開始回收垃圾的時間,另一個表示回收結束的暫停時間
D/dalvikvm( 9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/5261K, paused 2ms+2ms
注意這條資訊中的 “ 3571K/9991K” 值,這代表著程式使用的heap大小。
2.使用DDMS
Eclipse中的DDMS提供了一個觀察記憶體使用情況的GUI,當我們不斷點選Cause GC時,就會看到當前程式的Heap,使用比較方便,具體用法可以Google一下。
3.使用adb dumpsys 命令
adb是一個非常強大的工具,使用adb檢視應用程式記憶體使用情況可按如下格式在命令列裡檢視記憶體使用情況:
adb shell dumpsys meminfo <package_name>
其中,package_name 也可以換成程式的pid,pid可以通過 adb shell top | grep app_name 來查詢,下圖是某個程式的記憶體使用情況:
重點關注如下幾個欄位:
(1) Native/Dalvik 的 Heap 資訊
具體在上面的第一行和第二行,它分別給出的是JNI層和Java層的記憶體分配情況,如果發現這個值一直增長,則代表程式可能出現了記憶體洩漏。
(2) Total 的 PSS 資訊
這個值就是你的應用真正佔據的記憶體大小,通過這個資訊,你可以輕鬆判別手機中哪些程式佔記憶體比較大了。
4. 使用adb shell procrank
手機中的sh是經過精簡過的,有些手機可能沒有 procrank 命令,可以使用genymotion模擬器,或是自己安裝procrank命令。使用procrank時,命令列的輸出入下圖:
可以看到,在linux下表示記憶體的耗用情況有四種不同的表現形式:
VSS - Virtual Set Size 虛擬耗用記憶體(包含共享庫佔用的記憶體)
RSS - Resident Set Size 實際使用實體記憶體(包含共享庫佔用的記憶體)
PSS - Proportional Set Size 實際使用的實體記憶體(比例分配共享庫佔用的記憶體)
USS - Unique Set Size 程序獨自佔用的實體記憶體(不包含共享庫佔用的記憶體)
VSS:VSS表示一個程序可訪問的全部記憶體地址空間的大小。這個大小包括了程序已經申請但尚未使用的記憶體空間。在實際中很少用這種方式來表示程序佔用記憶體的情況,用它來表示單個程序的記憶體使用情況是不準確的。
RSS:表示一個程序在RAM中實際使用的空間地址大小,包括了全部共享庫佔用的記憶體,這種表示程序佔用記憶體的情況也是不準確的。
PSS:表示一個程序在RAM中實際使用的空間地址大小,它按比例包含了共享庫佔用的記憶體。假如有3個程序使用同一個共享庫,那麼每個程序的PSS就包括了1/3大小的共享庫記憶體。這種方式表示程序的記憶體使用情況較準確,但當只有一個程序使用共享庫時,其情況和RSS一模一樣。
USS:表示一個程序本身佔用的記憶體空間大小,不包含其它任何成分,這是表示程序記憶體大小的最好方式!
可以看到:VSS>=RSS>=PSS>=USS
5.其它常用命令命令:
adb shell kill PIDNumber 死你想殺死的後臺程序來模擬某種 bug 的復現條件。
adb shell ps 檢視當前終端中的程序資訊
那麼如何在程式碼中判斷當前的硬體系統有多少的 RAM 呢?在 Framework ProcessList.java 中有如下程式碼可用:
ProcessList() {
MemInfoReader minfo = new MemInfoReader();
minfo.readMemInfo();
mTotalMemMb = minfo.getTotalSize()/(1024*1024);
}
檢視程序佔用cpu的情況:adb shell top -n 1 -d 0.5 | grep proc_ id
相關推薦
Android 中檢視記憶體的使用情況集常用adb命令
1. 在IDE中檢視Log資訊 當程式執行垃圾回收的時候,會列印一條Log資訊,其格式如下: D/dalvikvm: <GC_Reason> <Amount_freed>, <Heap_stats>, <External_memor
Android系統檢視記憶體情況的命令
1 procrank [email protected]:/ # procrank procrank PID Vss Rss Pss Uss cmdline 121 149692K 10
linux 中檢視記憶體使用情況
用 'top -i' 看看有多少程序處於 Running 狀態,可能系統存在記憶體或 I/O 瓶頸,用 free 看看系統記憶體使用情況,swap 是否被佔用很多,用 iostat 看看 I/O 負載情況... 還有一種辦法是 ps -ef | sort -k7 ,將程序按
Android中一些常用adb命令的使用
使用adb命令之前首先要配置Android sdk,adb.exe應用程式在Android sdk->platform-tools路徑下面。如果環境配置OK,那在命令列執行adb的時候是可以看到adb的版本以及一些命令描述的,如下圖: 下面介紹一些常用的adb命令
Android 中常用ADB命令介紹
ADB(Android Debug Bridge),是Android SDK中的一個工具, 它是在Android sdk/platform-tools 資料夾下的,使用ADB可以直接操作管理Android模擬器或者真實的Andriod裝置。 ADB主要功能有:
Android】開發優化之——調優工具:dump hprof file 檢視記憶體情況,找到記憶體洩露,androidhprof
如何用MAT來分析,前提是Android開發和測試的工具安裝完整,SDK,Eclipse: 1.開啟Eclipse 2.選擇 Help->Install New Software; 3.在Work with中新增站點:download.eclipse.org/mat/1.0/update-site/(這
Android procrank檢視記憶體使用情況
使用adb shell procrank 手機中的sh是經過精簡過的,有些手機可能沒有 procrank 命令,可以使用genymotion模擬器,或是自己安裝procrank命令。使用procra
Android命令列檢視記憶體情況
在學習如何檢視記憶體前先來介紹幾個概念 VSS - Virtual Set Size 虛擬耗用記憶體(包含共享庫佔用的記憶體) RSS - Resident Set Size 實際使用實體記憶體(包含共享庫佔用的記憶體) PSS - Proportiona
Android測試 常用adb命令總結
文件夾復制 管理器 over 撥號 tomat 坐標 eclipse 行修改 rem 針對移動端 Android 的測試, adb 命令是很重要的一個點,必須將常用的 adb 命令熟記於心, 將會為 Android 測試帶來很大的方便,其中很多命令將會用於自動化測試的腳本當
Android 常用 adb 命令總結
robotium 自動 time ble device 關鍵字 狀態異常 begin 讀寫 最近微信《跳一跳》比較火,看了一個刷分輔助用的是 adb + python,於是來學習adb的運用。 以下轉自 澄和 針對移動端 Android 的測試, adb 命令是很重要的一
【Android】常用ADB命令總結
1. 檢視當前執行的Activity 方法一: adb shell logcat | grep ActivityManager 方法二: adb shell dumpsys activity activities 2. 檢視安裝包資訊 輸出安裝包資訊:
Android常用adb命令總結(一)
ADB是android sdk裡的一個工具,用這個工具可以直接操作管理android模擬器或者真實的andriod裝置。 ADB是一個客戶端-伺服器端程式,其中客戶端是你用來操作的電腦,伺服器端是android裝置。 它的主要功能有: 執行裝置的shell(命令列)
檢視記憶體情況
jinfo:可以輸出並修改執行時的java 程序的opts。 jps:與unix上的ps類似,用來顯示本地的java程序,可以檢視本地執行著幾個java程式,並顯示他們的程序號。 jstat:一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量。&
android下檢視記憶體閥值限制
android下檢視記憶體閥值方法為: ? 1 2 1|[email protected]:/ # cat /sys/module/lowmemorykiller/p
Android常用adb命令總結
Android 常用 adb 命令總結 針對移動端 Android 的測試, adb 命令是很重要的一個點,必須將常用的 adb 命令熟記於心, 將會為 Android 測試帶來很大的方便,其中很多命令將會用於自動化測試的腳本當中。 Andro
LeakCanary——直白的展現Android中的記憶體洩露
之前碰到的OOM問題,終於很直白的呈現在我的眼前:我嘗試了MAT,但是發現不怎麼會用。直到今天終於發現了這個新工具: 當我們的App中存在記憶體洩露時會在通知欄彈出通知: 當點選該通知時,會跳轉到具體的頁面,展示出Leak的引用路徑,如下圖所示: LeakCanary
Android開發——常用ADB命令的使用
ADB全稱Android Debug Bridge, 是android sdk裡的一個工具, 位於 SDK/platform-tools/ 目錄下,其原始碼位於/system/core/adb 目錄下。 ADB採用C/S架構,包括以下三個部分: (1)客戶端
Android中檢視當前Activity是否銷燬
進入到Android-sdk中platform-tools目錄 在命令列中執行以下命令 adb shell dumpsys activity>activity.txt 可以將當前的四大元件(Activity,Service,BroadCase,ContentProvider)的存在情況列印到當前目錄的
vs2010中檢視記憶體和暫存器
今天講一下如何從VS2010中檢視記憶體和暫存器狀態,一般來講,只要從事C/C++程式設計的人,基本上對於這篇文章完全可以略過了,但寫這篇文章的初衷在於,自己也是從這一步中過來的,記得當年自己其實也不知道如何快速使用VS中各種工具,導致花了很多時間在查詢資料上面。所以,本文基本上可以說是面向菜鳥級選
談談android中的記憶體洩漏
寫在前面 記憶體洩漏實際上很多時候,對於開發者來說不容易引起重視。因為相對於crash來說,android中一兩個地方發生記憶體洩漏的時候,對於整體沒有特別嚴重的影響。但是我想說的是,當記憶體洩漏多的時候,很容易造成他OOM的,因為android給每個app的