天天看點

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

1.介紹

Chromium對記憶體的消耗一直以來都為人诟病,着手進行記憶體優化我們首先需要了解chromium的記憶體使用政策以及目前政策下記憶體的消耗情況,公欲善其事,必先利其器,首先介紹一下chromium自帶的systrace工具包含的一個記憶體列印插件。從chromium 48版本開始,trace工具加入了MemoryInfra插件,通過trace抓取的log可以過濾包含heap的使用情況以及記憶體的狀态變化,使用chrome://trace 或chrome://inspect?tracing(android)進行開關控制;

1.1 Request& Purpose

Request:網頁浏覽器引擎chromium 記憶體優化及分析工具的指導。

Purpose:參照此文檔能夠快速找到定位chromium記憶體的方法,并對chromium記憶體的形态及管理模型有初步的認識。

2. chromium 記憶體分析工具Memory-infra

2.1 memory-infra 工具啟動

A、 啟動chrome并打開—enable-heap-profiling.的開關(待求證)這個是用來列印chromium的調用棧.

B、 開始抓取memoryinfra的log.準備工作:為了保證抓取資料的精确度.最好保證是第一次打開chromium。并關閉多餘的tab頁,隻保留需要列印的對象頁面即可,記憶體資訊收集完成後可以通過呈現的視圖展現dump的細節,例如點選紫色的M圖示即可以顯示記憶體配置設定的函數調用關系。

C、使用devtool工具将android手機裝置連接配接到PC,手機root。

D、 進入chrome://inspect?tracing(調試桌面版進入chrome://tracing),進入trace;

E、 點選左上角的“record”,進入打點過濾設定項;

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

F、 選擇的類别必須包含“memory-infra”,然後點選“record”,記錄完成之後點選“stop”

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.2 memory-infra 記憶體視圖概覽

抓取的記憶體資料是某一時間段内chromium的記憶體狀态,系統自動每隔一段時間對記憶體進行一次打點拍照,記錄下目前時刻記憶體的詳細使用情況,包括總記憶體吃進/各個子系統記憶體占用,以及相關的資料調用棧等等...

抓取到的資料以圖例化呈現,大體區分為2塊區域:timeline view 以及analysis view。

2.2.1 timeline view

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

Timeline View展示了記憶體随時間推進的變化曲線,同樣也是按照程序和子系統的類别進行劃分的,也就是左側辨別的2個不同行:Memoryper process( 每個程序的記憶體資料)和Memoryper component (每個子系統的記憶體資料)詳細提供内容包括:

a.按程序顯示總的記憶體消耗

b.按子子產品顯示子系統總的記憶體消耗

c.各個子系統各自的記憶體消耗

2.2.2 Analysis View

這塊區域是顯示的某一時刻下記憶體分布的詳細資料,點選

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

或者

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

可以将某一時刻記憶體狀态的詳細資訊列印在Analysis View區域:

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

從左邊的overview可以看到,展示的記憶體分布是以程序區分的,每個程序的詳細資料又分為藍色字型部分和黑色字型部分,展示的清單種類:

藍色的列:顯示的各程序實際使用的記憶體大小

1)Total Resident: 各程序總記憶體消耗

2)Peak Total Resident: 各程序對記憶體消耗的峰值

3)PSS: 實際使用的實體記憶體(比例配置設定共享庫占用的記憶體)

4)Private Dirty:私有dirty記憶體

5)Swapped: 交換區域的記憶體

黑色的列:顯示各個子系統實際占用的記憶體大小

1)Blink GC: Oilpan(Blink objects的垃圾回收系統)子系統的記憶體消耗

2)CC: compositor 合成層

3)Discardable:diacarde memory 區域的大小

4)Font Caches: 字型緩存

5)GPU 和 GPU Memory Buffer: GPU程序的記憶體消耗.

6)Malloc: 通過調用malloc或者是非blink 的object new 出來的空間

7)PartitionAlloc: blink的記憶體管理器配置設定的記憶體

8)Skia: skia的記憶體大小

9)SQLite: 資料庫相關

10)V8: V8 js引擎的記憶體配置設定

11)Web Cache: web頁面的緩存資料

2.3 memory-infra 子系統記憶體解析

Used memory:頁面顯示所需要的實際配置設定的記憶體大小;目前還隻能統計到記憶體實際使用的大小,還無法統計到是誰或者哪個子系統配置設定了這些記憶體;

Allocated memory:需要的虛拟記憶體的大小,該值反映出系統潛在的記憶體需求,不一定是實際的使用記憶體;如:有可能建立了一個2M skia buffer,但實際使用可能隻有16k。是以對系統的硬性要求是16k而不是2M.

點選藍色字型的資料,可以檢視這段事件内各個時刻詳細的記憶體分布資料:

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

點選黑色字型的子系統列,可以檢視該子系統記憶體狀态的分布

2.3.1 Blink_gc(Oilpan)

針對Blink對象的記憶體垃圾處理系統,Blink本身包含對個線程,包括主線程,HTML解析線程,資料庫線程等等,這些線程會包含一些跨線程的指針,Oilpan主要工作就是周遊這些線程的對象,記錄正常使用的對象并清除沒用的對象。

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.2 CC

cc子系統的記憶體主要是ResourceProvider使用的資源所配置設定的記憶體,所有資源所配置設定的記憶體都會羅列在cc/resource_memory 下,而這些資源子集被稱為tile memory,并且在cc/tile_memory下記錄,對于即出現在cc/resource_memory下又出現在 cc/tile_memory的資源所占被記憶體會被統計到cc/tile_memory下。

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.3 Discaedable

cache 資源被标記為Discardable memory。

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.4 Gpu

記錄CC繪制資源時所使用的GPU路徑而産生的記憶體份額。這個記憶體并不是GPU的記憶體,它隻是在渲染過程中所用到的共享記憶體部分。例如:GL command buffer, image upload paths/用來向GPU傳送資料的Transfer Buffer。

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.5 Java_heap

Java 層啟動時候heap配置設定的空間

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.6 Malloc

通過malloc獲得的記憶體空間。

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.7 Partition_alloc

PartitionAlloc本身是一個記憶體配置設定管理子產品,是為保證blink系統最佳性能和資料安全而單獨設計的子產品。blink内的對象的全部分布在PartitionAlloc或Oilpan。

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.8 Skia

skia系統所用到的資源所配置設定的記憶體;

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

2.3.9 V8 引擎

V8系統内配置設定的記憶體;

chromium記憶體分析工具MemoryInfra1.介紹2. chromium 記憶體分析工具Memory-infra

繼續閱讀