Chromium 内存分析方法
本文仅仅对Chromium 中的内存分析工具做个简单的总结。想要知道具体某个分析方法的应该如何使用,请查看相对应的参考文档
前端分析工具
通常是使用DevTools
里面的Memory
提供的分析方式。一般是通过Heap snapshot
来获取当前的堆快照,然后找到不在DOM树中,但被JS对象所引用的元素。我们通过搜索关键字”Detached“来查找这些元素。</br>
参考文档
LINUX
通过/proc/xxx/status
或者htop
查看进程RES、PSS、SHR的情况。 通过/proc/xxx/smaps
、/proc/xxx/maps
查看文件映射区的内存情况(对于较大的内存,malloc是使用mmap在文件映射区中分配内存的)。
参考文档
Tracing with MemoryInfra
MemoryInfra
是Chromium提供的一个基于Tracing的内存分析工具。也可以查看到进程的PSS、SHR的整体情况。还可以看到Chromium各个模块内存情况,比如CC、gpu、media 模块的具体信息。最后,Chromium 有几种内存管理方式,比如 Discardable Memory,Partition Alloc,Oilpan,V8 heap等等,我们也可以通过Memory Infra
看到这些模块的内存使用请
heap profiling
从Chromium 48版本开始,Chromium便支持heap profiling
功能。通过heap profiling
,我们能跟踪那些通过new或者malloc分配的但又未释放的内存。甚至,我们可以看到相对应的调用堆栈。
备注:Electron上不支持
heap profiling
功能。
参考文档
- MemoryInfra
- memory_infra_startup_tracing
- Memory Usage in CC
- GPU Memory Tracing
- Heap Profiling with MemoryInfra
- BlinkOn 15 - Memory Infra
Profiling heap with gperftools
Liunx 平台下,默认使用tcmalloc作为默认的allocator。我们可以使用gpertools来分析使用tcmalloc的程序的内存状况。