Bug追踪

mac下chrome浏览器的标签页、进程和内存分配

2018-11-29  本文已影响129人  凌霄光

因为最近要解决网页经常崩溃的问题,所以去研究了一下chrome浏览器的标签页和进程的关系,以及标签页对应进程的内存分配。

标签页和进程的对应关系

当chrome浏览器开启但是没有任何一个标签页的时候,打开Activity Manager,按名称降序排列,会发现有一个google chrome进程,和2个google chrome helper进程,

image.png

然后打开一个标签页,发现多了两个Google Chrome Helper进程,

image.png image.png image.png

当页面加载完成,发现又少了一个

image.png image.png

再打开一个页面会重复这个过程

image.png image.png image.png image.png

到这里可以得出结论:chrome默认会启动主进程,和两个子进程,然后每打开一个标签页会启动两个进程,当页面加载完成其中一个进程会结束,只剩一个进程用于渲染和交互和网络请求,以后每个标签页都会重复这个过程。

标签页的内存分配

接下来是找到我们网站所在的标签页对应的进程,去观察他的一些资源占用情况。

确定了一个进程之后,然后点击强制退出,发现标签页崩溃了。由此,我确定了新增的那个进程就是当前标签页所对应的进程。

image.png image.png image.png

之后我看了下他的一些资源占用情况,

image.png image.png

当我打开一个图片很多的子页面时明显看到内存占用上升,

image.png

image.png

之后我想测试一下一个标签页的内存上限是多少,也就是内存到多少时标签页的进程会被强制杀死,或者说页面崩溃。

于是我写了一个测试页面,

image.png

打开他的内存进程信息面板,看到现在内存占用是60M,于是我开始点击按钮添加网页内容

image.png

后来发现内存到300M就不动了,再添加多少都是这样,之后应该是在分配虚拟内存了。

image.jpeg

因为虚拟内存的方式,mac osx下页面不容易崩溃,在windows下是怎样的机制没去研究,但崩溃的情况比较多,估计是windows下的情况。

总结

通过Activity Manager去研究mac下chrome浏览器的标签页和进程的关系以及标签页的内存分配,发现chrome默认会启动一个主进程和两个子进程,之后每启动一个标签页会启动2个进程,加载完成后会结束一个。每个标签页都会分配实际内存和虚拟内存,当实际内存达到300M左右时,之后就只会分配虚拟内存。因为这种机制的存在,mac下页面还是没那么容易因为内存溢出而崩溃的,更多的要去关心windows下的内存占用情况。

上一篇下一篇

猜你喜欢

热点阅读