mac下chrome浏览器的标签页、进程和内存分配
因为最近要解决网页经常崩溃的问题,所以去研究了一下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下的内存占用情况。