The Chromium Projects

Except as otherwise noted, the content of this page is licensed under a Creative Commons Attribution 2.5 license, and examples are licensed under the BSD License.

The Chromium OS designs and code are preliminary. Expect them to evolve.
For Developers‎ > ‎Design Documents‎ > ‎

net-internals

Overview

The "chrome://net-internals/" webpage is a special URL in chromium that dumps a view of the network stack's internal state.

This data can be helpful when debugging performance or connectivity problems.

It includes information on request performance, proxy settings and DNS cache.

URL Format

The URL format is:

"chrome://net-internals/filter

If filter is blank then all of the information will be displayed. Otherwise filter should be the name of a subsection.

Subsections are organized hiearchically, and use dotted names.

For example, to see all of the information relating to proxies use the URL "chrome://net-internals/proxyservice". Whereas to print just the proxy settings construct the URL "chrome://net-internals/proxyservice.config".

LoadLog format

Much of the information on the "chrome://net-internals/" page is captured and visualized using a "LoadLog" (src/net/load_log.h).

The LoadLog is simply an event stream showing when various actions were started/completed.

Here is an example LoadLog:

t=1814517460: +INIT_PROXY_RESOLVER                    [dt=45]
t=1814517460:   +INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT [dt= 3]
t=1814517463:   -INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT
t=1814517463:   +INIT_PROXY_RESOLVER_SET_PAC_SCRIPT   [dt=42]
t=1814517506:   -INIT_PROXY_RESOLVER_SET_PAC_SCRIPT
t=1814517506: -INIT_PROXY_RESOLVER
  • The t=* numbers in the left colum show the time when an event occurred (in milliseconds of the system tickcount).
  • The + symbol besides an event type indicates the start of that event.
  • The - symbol besides an event type indicates the completion of that event.
  • The elapsed time between the start and completion of an event type is shown to the right of the start of that event, as dt=*.
    • For example, the entire INIT_PROXY_RESOLVER action took a total of 45 milliseconds (from t=1814517460 until t=1814517506).
  • The meanings of events like INIT_PROXY_RESOLVER are explained by load_log_event_type_list.h
So, the example above reads as: "It took 45 ms to initialize the proxy resolver -- 3 seconds to download the PAC script (INIT_PROXY_RESOLVER_FETCH_PAC_SCRIPT), and 42 milliseconds to parse and test it (INIT_PROXY_RESOLVER_SET_PAC_SCRIPT)".

Caveats

Generally the entries in a LoadLog are ordered chronologically.

However, there are some instances when this isn't the case.

For example, with TCP socket "late binding", the request's LoadLog will first show a SOCKET_POOL_WAITING_IN_QUEUE event. Only once the ConnectJob completes will the SOCKET_POOL_CONNECT_JOB sequence be appended to the log for this request. (hence the times within the SOCKET_POOL_CONNECT_JOB sequence may predate the preceding line).

Subsection: proxyservice.config

This subsection shows the effective proxy settings that Chromium is using.

Generally this will correspond to the system's proxy settings, or an override that was specified on the command line

Here is example of what it looks like:

Automatic settings:
  Auto-detect: Yes
  Custom PAC script: http://custom/pac.js
Manual settings:
  Proxy server: single-proxy:81
  Bypass list: [None]
  Bypass local names: No
If there is a proxy server per URL scheme, then the "Proxy server" section will break it down by HTTP/HTTPS/FTP/SOCKS.
When there is conflicting choices between the "Automatic settings" and "Manual settings", the proxy settings fallback from automatic to manual similarly to IE.

Subsection: proxyservice.init_log

This subsection shows the proxy initialization sequence that happened for the current proxy settings.

This initialization sequence gets run each time the proxy settings change (and is responsible for things like downloading and testing custom PAC scripts).

Generally this latency will be attributed to the very first network request that chromium issues. It will show up in the requests's LoadLog as PROXY_SERVICE_WAITING_FOR_INIT_PAC. The specifics of that latency are shown in proxyservice.init_log.

Subsection: hostresolver.hostcache

This subsection shows the DNS cache that Chromium is using.

  • Red entries are lookups which failed, (and will not be used)
  • Blue entries are ones which have already expired, (and will not be used)
  • Black entries are entries with a positive TTL that will be used.

Note that a single IP address is printed for each entry, but in reality there may be a full list of network addresses associated with this cache entry

Subsection: urlrequest.outstanding

This subsection shows the requests which are currently in progress.

It is ordered from most recent to oldest.

Check this to find the LoadLog of hung requests.

Note that the request to load "chrome://net-internals/" itself will always show up as an outstanding request (since it is outstanding when we execute the code that populates this subsection).

Subsection: urlrequest.recent

This subsection shows the most recent requests that have completed.

It is ordered from most recent (completion time) to oldest (completion time).

Check this to find the Load log for a recently issued request.