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的程序的内存状况。