Will warm up the memory cache and then measure how much live memory the analyzer consumes after visiting all elements with the warmed up cache.
All results
--------------------------------
flutter_elements
reachableObjects
count: 9071480
size: 799672175 = 780929 KB = 762 MB
_SimpleUri
count: 3112
size(shallow): 248960 = 243 KB
duplicateCount: 0
Change-Id: I75209f88f6f615172127cd439afe9d0cd83b1c4f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/329682
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Currently the heap snapshot tool uses a regular Set<int> for storing
ints between 0 and the number of objects (n).
This CL instead introduces a specialized int set backed by a Uint8List
where each bit represents a number between 0 and n.
This specialized set is then created to fit the number of objects, so
even an empty set takes the same amount of space as a full set: about
125 kb per million possible values (or ~6 mb per 50 million).
For small sets thats a lot worse than before, but for big sets it's a
lot better. Runtime is also a lot better.
"Benchmarks" on a snapshot that's ~1.5GB:
Runtimes:
Before:
closure roots (or all after the first one): ~30s, ~19s, ~20s
eval and: ~5.5s, ~6.3, ~5.6
eval or: ~7.3s, ~6.5s, ~6.4s
eval minus: ~4.5s, ~6.4s, ~6.5s
With CL:
closure roots (or all after the first one): ~7.7s, ~4.3s, ~4.1s
eval and: ~0.2s, ~0.3s, ~0.2s
eval or: ~0.6s, ~0.6s, ~0.6s
eval minus: ~0.3s, ~0.2s, ~0.3s
Memory usage:
Before:
after loaded:
$ grep -E "VmPeak|VmSize|VmRSS" /proc/588700/status
VmPeak: 10293036 kB
VmSize: 9896880 kB
VmRSS: 9260604 kB
after all = closure roots
VmPeak: 12354840 kB
VmSize: 9529612 kB
VmRSS: 8898088 kB
after 2 x closure all
VmPeak: 13068580 kB
VmSize: 12478236 kB
VmRSS: 11891620 kB
after 3 x eval and
VmPeak: 18377540 kB
VmSize: 18376520 kB
VmRSS: 17803032 kB
after 3 x eval or
VmPeak: 19621712 kB
VmSize: 18114376 kB
VmRSS: 17491808 kB
after 3 x eval minus
VmPeak: 21522780 kB
VmSize: 21522272 kB
VmRSS: 20907724 kB
With CL:
after loaded:
$ grep -E "VmPeak|VmSize|VmRSS" /proc/594718/status
VmPeak: 10293560 kB
VmSize: 9967036 kB
VmRSS: 9323404 kB
after all = closure roots
VmPeak: 10293560 kB
VmSize: 9805272 kB
VmRSS: 9137364 kB
after 2 x closure all
VmPeak: 10868740 kB
VmSize: 10867208 kB
VmRSS: 10199784 kB
after 3 x eval and
VmPeak: 10906236 kB
VmSize: 10905728 kB
VmRSS: 10238424 kB
after 3 x eval or
VmPeak: 10925496 kB
VmSize: 10924988 kB
VmRSS: 10257388 kB
after 3 x eval minus
VmPeak: 10944756 kB
VmSize: 10944248 kB
VmRSS: 10276672 kB
Change-Id: I8d0b65fa51ac2bd4696c4d2782c4423966a7fbae
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324682
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
This CL extends the heapsnapshot analysis CLI with tab-completion support
for commands, options, filenames, expression types and named sets.
This makes it much more comfortable to use the tool.
TEST=runtime/tools/heapsnapshot/test/completion_test
Change-Id: Iea48b4bd12651a60add6206a92ce06823cbd754a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/262243
Reviewed-by: Tess Strickland <sstrickl@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
This CL adds an interactive command line tool to analyze
heapsnapshots generated by the Dart VM.
The tool works by operating on sets of objects. It supports operations
like users, transitive closure, union, ...
An example usage that loads snapshot, finds all live objects, finds
the empty lists in them and prints retainers of the empty lists:
```
% dart bin/explore.dart
(hsa) load foo.heapsnapshot
(hsa) all = closure roots
(hsa) stat all
size count class
-------- -------- --------
43861 kb 8371 _Uint8List dart:typed_data
...
-------- -------- --------
108904 kb 400745
(hsa) empty-lists = dfilter (filter all _List) ==0
(hsa) empty-growable-lists = filter (users empty-lists) _GrowableList
(hsa) retain empty-growable-lists
There are 5632 retaining paths of
_GrowableList (dart:core)
⮑ ・UnlinkedLibraryImportDirective.configurations (package:analyzer/src/dart/analysis/unlinked_data.dart)
⮑ ﹢_List (dart:core)
⮑ ・...
```
For now the tool lives only in dart-lang/sdk.
TEST=pkg/heapsnapshot/test/*_test.dart
Change-Id: I671c2e3ca770e1a5aa3e590e850a5694070b4c3a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/261100
Reviewed-by: Tess Strickland <sstrickl@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>