Memory Usage Test

This test was conducted to measure memory usage of the various processes that each browser generates.

Graph of browser memory usage, Chrome uses a lot.

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/15/firefox-memory-usage-with-multiple-content-processes/ and http://www.erahm.org/2017/03/10/are-they-slim-yet-round-2/