Chromium 内存分析方法

Posted by Hope on September 25, 2020

Chromium 内存分析方法

本文仅仅对Chromium 中的内存分析工具做个简单的总结。想要知道具体某个分析方法的应该如何使用,请查看相对应的参考文档

前端分析工具

通常是使用DevTools里面的Memory提供的分析方式。一般是通过Heap snapshot来获取当前的堆快照,然后找到不在DOM树中,但被JS对象所引用的元素。我们通过搜索关键字”Detached“来查找这些元素。</br> image

参考文档

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看到这些模块的内存使用请 image

heap profiling

从Chromium 48版本开始,Chromium便支持heap profiling功能。通过heap profiling,我们能跟踪那些通过new或者malloc分配的但又未释放的内存。甚至,我们可以看到相对应的调用堆栈。 image 备注:Electron上不支持heap profiling功能。

参考文档

Profiling heap with gperftools

Liunx 平台下,默认使用tcmalloc作为默认的allocator。我们可以使用gpertools来分析使用tcmalloc的程序的内存状况。

参考文档

其他参考文档