Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(422)

Side by Side Diff: components/tracing/docs/heap_profiler.md

Issue 1598393004: [Docs] Move heap profiler docs into repository (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@docs
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | components/tracing/docs/memory_infra.md » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Heap Profiling with MemoryInfra
2
3 As of Chrome 48, MemoryInfra supports heap profiling. The core principle is
4 a solution that JustWorks™ on all platforms without patching or rebuilding,
5 intergrated with the chrome://tracing ecosystem.
6
7 [TOC]
8
9 ## How to Use
10
11 * Start Chrome with the `--enable-heap-profiling` switch. This will make Chrome
petrcermak 2016/01/19 10:13:55 Shouldn't this be an enumeration (1, 2, 3, ...)?
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
12 keep track of all allocations.
13
14 * Grab a [MemoryInfra][memory-infra] trace. For best results, start tracing
15 first, and _then_ open a new tab that you want to trace. Furthermore,
16 enabling more categories (besides memory-infra) will yield more detailed
17 information in the heap profiler.
petrcermak 2016/01/19 10:13:55 maybe say "... in the heap profiler pseudo stack t
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
18
19 * When the trace has been collected, select a heavy memory dump indicated by
20 a purple ![M][m-purple] dot. Heap dumps are only included in heavy memory
21 dumps.
22
23 * In the analysis view, cells marked with a triple bar icon (☰) contain heap
24 dumps. Select such a cell.
25
26 ![Cells containing a heap dump][cells-heap-dump]
27
28 Note that at the moment only PartitionAlloc is supported. Heap dumps for
29 malloc is currently in the prototype stage.
petrcermak 2016/01/19 10:13:54 s/is/are/ (or s/dumps/dumping/ on the previous lin
Ruud van Asseldonk 2016/01/19 10:44:48 Fixed.
30
31 * Scroll down all the way to _Heap Details_.
32
33 * Pinpoint the memory bug and live happily ever after.
34
35 [memory-infra]: memory_infra.md
36 [m-purple]: https://drive.google.com/uc?id=0Bx14iZPZRgb5RFFGc0xZZEJWVFk
37 [cells-heap-dump]: https://drive.google.com/uc?id=0Bx14iZPZRgb5NGlJSFRONTFoWEU
38
39 ## Heap Details
40
41 The heap details view contains a tree that represents the heap. The size of the
42 root node corresponds to the selected allocator cell.
43
44 *** aside
45 The size value in the heap details view will not match the value in the selected
46 analysis view cell exactly. There are three reasons for this. First, the heap
47 profiler reports the memory that _the program requested_, whereas the allocator
48 reports the memory that it _actually allocated_ plus its own bookkeeping
49 overhead. Second, allocations that happen early --- before Chrome knows that
50 heap profiling is enabled --- are not captured by the heap profiler, but they
51 are reported by the allocator. Third, tracing overhead is not discounted by the
52 heap profiler.
53 ***
54
55 The heap can be broken down in two ways: by _backtrace_ (marked with an ƒ), and
56 by _type_ (marked with a Ⓣ). When tracing is enabled, Chrome records trace
57 events, shown in the flame chart in timeline view. At every point in time these
petrcermak 2016/01/19 10:13:55 nit: This makes it sounds like Chrome *only* recor
Ruud van Asseldonk 2016/01/19 10:44:48 Replaced “shown” with “most of which appear”.
58 trace events form a pseudo stack, and a vertical slice through the flame chart
59 is like a backtrace. This corresponds to the ƒ nodes in the heap details view.
60 Hence enabling more tracing categories will give a more detailed breakdown of
61 the heap.
62
63 The other way to break down the heap is by object type. At the moment this is
64 only supported for PartitionAlloc.
petrcermak 2016/01/19 10:13:55 The second sentence seems irrelevant at the moment
Ruud van Asseldonk 2016/01/19 10:44:48 I know, but the screenshots show the icon for mall
petrcermak 2016/01/19 11:11:30 Do you mean the heap dump icon? As far as I unders
65
66 *** aside
67 In official builds, only the most common type names are included due to binary
68 size concerns. A development build has full type information.
petrcermak 2016/01/19 10:13:54 nit: I don't like the indefinite article in front
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
69 ***
70
71 To keep the trace log small, uninteresting information is omitted from heap
72 dumps. The long tail of small nodes is not dumped, but grouped in an `<other>`
73 node instead. Note that altough these small nodes are insignificant on their
74 own, together they can be responsible for a significant portion of the heap. The
75 `<other>` node is large in that case.
76
77 ## Example
78
79 In the trace below, `ParseAuthorStyleSheet` is called at some point.
80
81 ![ParseAuthorStyleSheet pseudo stack][pseudo-stack]
82
83 The pseudo stack of trace events translates in the tree of ƒ nodes below. Of the
petrcermak 2016/01/19 10:13:54 nit: s/translates in/is translated into/
Ruud van Asseldonk 2016/01/19 10:44:48 Changed to “corresponds to”.
84 23.5 MiB of memory allocated with PartitionAlloc, 1.9 MiB was allocated inside
85 `ParseAuthorStyleSheet`, either directly, or at a deeper level
86 (like `CSSParserImpl::parseStyleSheet`).
87
88 ![Memory Allocated in ParseAuthorStyleSheet][break-down-by-backtrace]
89
90 By expanding `ParseAuthorStyleSheet`, we can see which types were allocated
91 there. Of the 1.9 MiB, 371 KiB is spent on `ImmutableStylePropertySet`s, and
petrcermak 2016/01/19 10:13:55 nit: s/is/was/ (consistency with "were allocated"
Ruud van Asseldonk 2016/01/19 10:44:48 Done. You are sharp today :)
92 238 KiB is spent on `StringImpl`s.
petrcermak 2016/01/19 10:13:54 ditto
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
93
94 ![ParseAuthorStyleSheet broken down by type][break-down-by-type]
95
96 It is also possible to break down by type first, and then by backtrace. Below
97 we see that of the 23.5 MiB allocated with PartitionAlloc, 1 MiB is spent on
98 `Node`s, and about half of the memory spent on nodes was allocated in
99 `HTMLDocumentParser`.
100
101 ![The PartitionAlloc heap broken down by type first and then by backtrace][type- then-backtrace]
102
103 Heap dump diffs are fully supported by trace viewer. Select a heavy memory dump,
104 then with the control key select a heavy memory dump earlier in time. Below is a
petrcermak 2016/01/19 10:13:54 people tend to forget things, so it might be worth
petrcermak 2016/01/19 10:13:55 nit: Since you can also select a dump in the futur
Ruud van Asseldonk 2016/01/19 10:44:48 Hah, actually I stressed that you have to select t
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
petrcermak 2016/01/19 11:11:30 Oh, really? Then it's a bug in the memory UI. It s
105 diff of theverge.com before and in the middle of loading ads. We can see that 4
106 MiB was allocated when parsing the documents in all those iframes, almost a
petrcermak 2016/01/19 10:13:54 probably s/was/were/
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
107 megabyte of which was due to JavaScript. (Note that this is memory on the
petrcermak 2016/01/19 10:13:54 nit: s/memory on the/memory allocated by/
Ruud van Asseldonk 2016/01/19 10:44:48 Done.
108 PartitionAlloc alone, the total renderer memory increase was around 72 MiB.)
109
110 ![Diff of The Verge before and after loading ads][diff]
111
112 [pseudo-stack]: https://drive.google.com/uc?id=0Bx14iZPZRgb5M194Y2RqQ jhoZkk
113 [break-down-by-backtrace]: https://drive.google.com/uc?id=0Bx14iZPZRgb5ZDRQdGNnN DNIazA
114 [break-down-by-type]: https://drive.google.com/uc?id=0Bx14iZPZRgb5THJMYlpyT EN2Q2s
115 [type-then-backtrace]: https://drive.google.com/uc?id=0Bx14iZPZRgb5UGZFX1pDU VpOLUU
116 [diff]: https://drive.google.com/uc?id=0Bx14iZPZRgb5UzNvMmVOa 0RnQWs
OLDNEW
« no previous file with comments | « no previous file | components/tracing/docs/memory_infra.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698