Age | Commit message (Collapse) | Author |
|
The max_heap_size process flag can be used to limit the
growth of a process heap by killing it before it becomes
too large to handle. It is possible to set the maximum
using the `erl +hmax` option, `system_flag(max_heap_size, ...)`,
`spawn_opt(Fun, [{max_heap_size, ...}])` and
`process_flag(max_heap_size, ...)`.
It is possible to configure the behaviour of the process
when the maximum heap size is reached. The process may be
sent an untrappable exit signal with reason kill and/or
send an error_logger message with details on the process
state. A new trace event called gc_max_heap_size is
also triggered for the garbage_collection trace flag
when the heap grows larger than the configured size.
If kill and error_logger are disabled, it is still
possible to see that the maximum has been reached by
doing garbage collection tracing on the process.
The heap size is defined as the sum of the heap memory
that the process is currently using. This includes
all generational heaps, the stack, any messages that
are considered to be part of the heap and any extra
memory the garbage collector may need during collection.
In the current implementation this means that when a process
is set using on_heap message queue data mode, the messages
that are in the internal message queue are counted towards
this value. For off_heap, only matched messages count towards
the size of the heap. For mixed, it depends on race conditions
within the VM whether a message is part of the heap or not.
Below is an example run of the new behaviour:
Eshell V8.0 (abort with ^G)
1> f(P),P = spawn_opt(fun() -> receive ok -> ok end end, [{max_heap_size, 512}]).
<0.60.0>
2> erlang:trace(P, true, [garbage_collection, procs]).
1
3> [P ! lists:duplicate(M,M) || M <- lists:seq(1,15)],ok.
ok
4>
=ERROR REPORT==== 26-Apr-2016::16:25:10 ===
Process: <0.60.0>
Context: maximum heap size reached
Max heap size: 512
Total heap size: 723
Kill: true
Error Logger: true
GC Info: [{old_heap_block_size,0},
{heap_block_size,609},
{mbuf_size,145},
{recent_size,0},
{stack_size,9},
{old_heap_size,0},
{heap_size,211},
{bin_vheap_size,0},
{bin_vheap_block_size,46422},
{bin_old_vheap_size,0},
{bin_old_vheap_block_size,46422}]
flush().
Shell got {trace,<0.60.0>,gc_start,
[{old_heap_block_size,0},
{heap_block_size,233},
{mbuf_size,145},
{recent_size,0},
{stack_size,9},
{old_heap_size,0},
{heap_size,211},
{bin_vheap_size,0},
{bin_vheap_block_size,46422},
{bin_old_vheap_size,0},
{bin_old_vheap_block_size,46422}]}
Shell got {trace,<0.60.0>,gc_max_heap_size,
[{old_heap_block_size,0},
{heap_block_size,609},
{mbuf_size,145},
{recent_size,0},
{stack_size,9},
{old_heap_size,0},
{heap_size,211},
{bin_vheap_size,0},
{bin_vheap_block_size,46422},
{bin_old_vheap_size,0},
{bin_old_vheap_block_size,46422}]}
Shell got {trace,<0.60.0>,exit,killed}
|
|
|
|
d5f8d55b37c9c63418b4fe8ad5a5aa197a9a4385
|
|
* anders/diameter/info/OTP-13508:
Add diameter:peer_find/1
Add diameter:peer_info/1
|
|
* anders/diameter/overload/OTP-13330:
Suppress dialyzer warning
Remove dead case clause
Let throttling callback send a throttle message
Acknowledge answers to notification pids when throttling
Throttle properly with TLS
Don't ask throttling callback to receive more unless needed
Let a throttling callback answer a received message
Let a throttling callback discard a received message
Let throttling callback return a notification pid
Make throttling callbacks on message reception
Add diameter_tcp option throttle_cb
|
|
* anders/diameter/test/OTP-13438:
Don't assume list comprehension evaluation order
|
|
|
|
* dgud/mnesia/ext-backend/PR-858/OTP-13058:
mnesia_ext: Add basic backend extension tests
mnesia_ext: reuse snmp field for ext updates
mnesia_ext: Create table/data containers from mnesia monitor not temporary processes
mnesia_ext: Implement ext copies index
mnesia_ext: Load table ext
mnesia_ext: Dumper and schema changes
mnesia_ext: Refactor mnesia_schema.erl
mnesia_ext: Ext support in fragmented tables
mnesia_ext: Backup handling
mnesia_ext: Create schema functionality
mnesia_ext: Add ext copies and db_fold to low level api
mnesia_ext: Refactor record_validation code
mnesia_ext: Add create_external and increase protocol version to monitor
mnesia_ext: Add ext copies to records
mnesia_ext: Add supervisor and behaviour modules
|
|
|
|
Minimal impact when talking to older nodes.
|
|
processes
Tables or data containers should be owned and monitored by mnesia_monitor and
should thus be created by that process.
Always create_table before loading it
We need to create tables for ram_copies at least before loading
them as they are intermittent. It is also needed to get mnesia
monitor as the parent and supervisor of the data storage.
|
|
Make ram_copies index always use ordered_set
And use index type as prefered type not a implementation requirement,
the standard implmentation will currently ignore the prefered type.
|
|
|
|
|
|
|
|
|
|
|
|
Add ext to table/system information
Add add_backend_type
|
|
|
|
Should maybe be moved to mnesia.erl and inlined??
Or is it used elsewhere?
|
|
new protocol version to handle new schema fields
|
|
|
|
|
|
* raimo/polish-gen_statem/OTP-13065:
Fix all seealso and other minor changes
Editorial update
|
|
|
|
* kostis/hipe/add-bs_match-tests/PR-1044/OTP-13549:
Up the limit for the timetrap used in the HiPE testsuite
One more test suite for binary pattern matching
|
|
* kostis/os_mon/fix-compilation-sparc/PR-1046/OTP-13548:
Fix compilation on SUN/SPARC by including <stdlib.h>
|
|
* egil/et/fix-trace-tags/OTP-13545:
et: Update runtime dependencies
et: Update gc trace tags in selector
et: Remove unnecessary boilerplate in tests
|
|
* egil/runtime_tools/fix-runtime-deps:
runtime_tools: Update runtime deps
|
|
* ingela/inets/next-version:
inets: Prepare for release
Conflicts:
lib/inets/vsn.mk
|
|
|
|
* ingela/ssl/prepare-for-release:
ssl: Prepare for release
Conflicts:
lib/ssl/vsn.mk
|
|
* dgud/wx/compatible-with-wxW-3.1:
Test cuddle, increase sleep
wx: Fix warnings in example
Fix argv types
wx: Remove non implemented wxGauge functions
|
|
* dgud/observer/fixbugs:
Fix left column text width
observer: Remove ignored alignment flag
observer: Fix timing issue
Observer: do not create PaintDC outside of paint callbacks
observer: Reduce flicker in table info on windows
|
|
raimo/polish-gen_statem/OTP-13065
Conflicts:
lib/stdlib/doc/src/gen_statem.xml
|
|
* kennethlakin/tls-use-negotiated-prf/PR-1042/OTP-13546:
ssl: Use cipher suite's PRF in prf/5
|
|
* ingela/ssl/memory-foot-print:
ssl: Add reinitialization of handshake data lost in gen_statem refactorization
|
|
The pretty-printing of `...' in map types is complex. The
representation of `...' can be changed before OTP 19.
|
|
|
|
Some wild attributes are no longer mentioned separately.
|
|
|
|
'callback' and 'optional_callbacks' are no longer wild attributes.
|
|
|
|
|
|
In particular, types and specs can be pretty-printed.
There are issues with macros (left behind by epp_dodger).
Typed record fields are handled. Fields are represented by triples
instead of two-tuples, which is an incompatible change.
Some attributes (-export_type, -spec, -type, &c) have been given
meaning in recent time, but the set of wild attributes (see Barklund's
spec) is not changed.
|
|
|
|
|
|
* bjorn/stdlib/warning-and-error/OTP-13476:
Add documentation
epp: Add the -error and -warning directives
epp: Refactor expansion of header path
|
|
|
|
|