This test was conducted to measure memory usage of the various processes that each browser generates.
We continue to see Chrome utilizing the most memory: 2.4X the memory as Firefox 32-bit and 1.7X Firefox 64-bit on Windows. IE 11 does was the only one to used less than Firefox. It’s successor Edge, the default browser on Windows 10, appears to have similar memory consumption to Chrome. On macOS 10.12 we see Safari going the Chrome route as well.
Browsers included here are the default versions of IE 11 and Edge 38 on Windows 10, Chrome Beta 59 on all platforms, Firefox Beta 54 on all platforms, and Safari Technology Preview 29 on macOS 10.12.4.
Note: For Safari the test was done manually, they seem to have made some changes that cause all the pages from my test to be loaded in the same content process.
Test setup
Load the first 30 pages of the tp5 page set (a snapshot of Alexa top 100 websites from a few years ago), each in its own tab, with 10 seconds in between loads and 60 seconds of settle time at the end.
Note: There was a minor change to the setup to give each page a unique domain. At least Safari and Chrome are roughly doing process per domain, so just using different ports on localhost
was not enough. A simple solution was to modify my /etc/hosts
file to add localhost-<1-30>
aliases.
Methodology
Measuring multiprocess browser memory usage is tricky.
total_memory = sum_uss(content processes) + sum_rss(parent processes);
Where a parent process
is defined as anything that is not a content process. Historically there was just one parent process that manages all other processes, this is still somewhat the case but each browser still has other executables they may run in addition to content processes. A content process has a slightly different definition per browser, but is generally “where the pages are loaded” — this is an oversimplification.
Proposed definitions:
Browser | Content Definition | Example “parent” |
---|---|---|
Firefox | firefox processes launched with the -contentproc command line. |
firefox without the -contentproc command line, plugin-process which is used for Flash, etc. |
Chrome | chrome processes launched with the --type command line. |
chrome without out the --type command line , nacl_helper , etc. |
Safari | WebContent processes. |
Safari , SafariServices , SafariHistory , Webkit.Networking , etc. |
IE | iexplore.exe process launched with the /prefetch command line. |
iexplore without the /prefetch command line. |
Edge | MicrosoftEdgeCP.exe processes. |
MicrosoftEdge.exe , etc. |
For Firefox this is a reasonable and fair measurement, for other browsers we might be under counting memory by a bit. For example Edge has a parent executable, MicrosoftEdge.exe
, and a different content executable, MicrosoftEdgeCP.exe
, arguably we should measure the RSS of one the MicrosoftEdgeCP.exe
processes, and USS for the rest, so we’re probably under counting.
__________________________________________
Credit for this test and post
This test was conducted by Eric Rahm, Software Developer at Mozilla. Eric maintains areweslimyet.com and participates in the memshrink group. This is a repost of the test information, with minor revisions, from Eric’s personal blog posts: http://www.erahm.org/2017/05/