Age | Commit message (Collapse) | Author |
|
* siri/cdv/div-bugfixes/OTP-15391:
[cdv] Handle multiple "Yc" lines refering to the same refc binary
[cdv] Speed up reading of dump with many processes
|
|
Co-authored-by: Siri Hansen <[email protected]>
|
|
|
|
Usually, sub binaries are implemented as special sub binary terms
("Ys" lines). But if a sub binary is sent to another process, sub
binaries will be eliminated and incorporated into the ProcBin ("Yc"
line), and when that happens there can be several "Yc" lines that
refer to the same underlying binary object. Make sure that that the
crash dump viewer can handle multiple "Yc" lines referring to the same
binary object.
|
|
|
|
This commit replaces the old memory instrumentation with a new
implementation that scans carriers instead of wrapping
erts_alloc/erts_free. The old implementation could not extract
information without halting the emulator, had considerable runtime
overhead, and the memory maps it produced were noisy and lacked
critical information.
Since the new implementation walks through existing data structures
there's no longer a need to start the emulator with special flags to
get information about carrier utilization/fragmentation. Memory
fragmentation is also easier to diagnose as it's presented on a
per-carrier basis which eliminates the need to account for "holes"
between mmap segments.
To help track allocations, each allocation can now be tagged with
what it is and who allocated it at the cost of one extra word per
allocation. This is controlled on a per-allocator basis with the
+M<S>atags option, and is enabled by default for binary_alloc and
driver_alloc (which is also used by NIFs).
|
|
This test failed every now and then since the selected max size could
be equal to actual size of the dump - so the dump was not
truncated. This is now corrected.
|
|
This bug was introduced by commit 3b964e8dbaa0cd73ca7a983b3ce948e0dbd2c35c
|
|
This will reduce the size of crash dumps, especially if
there are large binaries.
|
|
Correct several problems parsing sub binaries. A sub binary
would often be replaced with '#CDVNonexistingBinary'.
When parsing a sub binary, we must scan ahead to find the
definition of the refc or heap binary being referenced.
|
|
This test failed every now and then since the selected max size could
be greater than the actual size of the dump - so the dump was not
truncated. This is now corrected.
|
|
|
|
If the version of the given crash dump is newer than what
crashdump_viewer is prepared to read, then crashdump_viewer will
display an info dialog and then terminate. This is to allow major
updates of the format of crash dumps.
|
|
|
|
When a literal was used from several processes, the literal would
be dumped in only one of the processes. The other processes
that referenced the literals would have incomplete heap data.
|
|
Maps would be dumped as the atom 'undefined', which is
not very informative.
|
|
|
|
Earlier, crashdump_viewer stored an index of all binaries in a gb_tree
on startup. The binary index was also stored in the
cdv_dump_index_table along with all other "=xxx" tags from the
dump. The difference between the indices was that the ets table
contained the addresses of the binaries as strings (the hex address
found after the "=binary:" tag) and in the gb_tree this hex address
was instead converted to its integer value. The index in the ets table
was only used once - when creating the gb_tree. The gb_tree was used
for all later looups (to map integer address to file position).
This commit replaces the two storages with one new ets table,
cdv_binary_index_table, using the integer value of the hex address as
key, and the position in the crashdump file as value. In the case of
many binaries, this makes the start of crashdump viewer faster (only
one place to write), and the data usage smaller (hex address strings
are no longer stored). And it avoids the gc of the gb_tree.
|
|
This is a bug fix: the end of the 'Last calls' section is meant to be
an empty line, but in some situations this is not the case. This could
cause the complete dump to be read and stored as 'Last calls', causing
very unexpected behavior in the crashdump viewer.
This commit adds a check for ": ", which indicates that a new heading
has occured and thus the 'Last calls' section is completly read.
|
|
|
|
|
|
If a crashdump is truncated due to size limit reached, a new 'abort'
tag with reason is added at the end of the crashdump. This reason is
now displayed along with the truncated-warning.
|
|
|
|
* siri/cuddle-master:
Extend timer in test
Update crashdump_viewer_SUITE with new release numbers
Set longer timetrap when creating dsa files
Check that ssh application exists before starting netconf tests
Improve error control when starting ssh in netconf test
|
|
After bumping to Erlang/OTP 19, R16 dumps can no longer be
created. Now we test dumps from OTP 17 and 18.
|
|
|
|
|
|
This was earlier filename:dirname(code:which(test_server)). On
Microsoft Windows, this pointed to a directory under c:/Program Files,
and in later versions this directory is no longer writable. The
framework (common_test) log dir is now used instead.
|
|
As a first step to removing the test_server application as
as its own separate application, change the inclusion of
test_server.hrl to an inclusion of ct.hrl and remove the
inclusion of test_server_line.hrl.
|
|
|
|
|
|
crashdump_viewer would crash if the owner of a timer was specified as
the process' regisered name. This has been corrected.
|
|
After bumping to Erlang/OTP 18, R15 dumps can no longer be
created. Now we test dumps from R16B and 17.
|
|
|
|
Instead of setting a timer and expecting all processes to be
terminated, set a monitor and wait for them to terminate.
|
|
A node to which we have references to multiple instances (creations)
will have an information line in the crashdump like this:
Creation: 1 2 ...
This would earlier crash because crashdump_viewer would try to do
list_to_integer on the value after "Creation: ". This is now
corrected.
This correction also helps the case when the emulator is debug
compiled, since the line could then be
Creation: 1 (refc=1)
|
|
Should not call showModal on a wxProgressdialog it is already display
(see doc) and it hangs on MacOSX until someone presses the menu.
|
|
|
|
* bugfixes
* add first test
* remove unused code
|
|
|
|
|
|
Else, crashdumps can not be generated.
|
|
Generate dumps for r14, r15 and r16.
Save generated dumps if test fails.
|
|
OTP-10106
OTP-10107
|
|
|
|
|
|
|
|
|
|
Also, remove compiler warnings for crashdump_viewer_SUITE and fix
Makefile in test directory so Emakefile does not grow.
|
|
This is a first attempt at fixing the problem described in seq11783 -
crashdump_viewer is very slow at parsing big crashdumps. To open the
first page for a dump of 17M takes about 2 minutes and a dump of 280M
takes 1.5-2 hours.
The main problmem is that the cdv_dump_index_table, which holds all
tags read from the dump, is a bag. Profiling shows that ~95% of the
time is spent in ets:insert. The table is now changed to an
ordered_set.
A second problem occured when a page with many table rows was
opened. These pages were sent to inet in one chunk, causing both
crashdump_viewer_server and the inets (mod_esi) process to grow very
much in memory usage. To overcome this, the pages are now sent to
inets in chunks of 1000 rows, and the data is coverted to binaries to
avoid data copying between the two processes.
Also, some new information in the crashdump was not recognized by the
crashdump_viewer. This has been fixed.
|