memsup

MODULE

MODULE SUMMARY

DESCRIPTION

memsup is a process which supervises the memory usage for
the system and for individual processes. It is part of the OS_Mon
application, see os_mon(6).
Available for Unix, Windows and VxWorks.

Periodically performs a memory check:

If more than a certain amount of available system memory is
allocated, as reported by the underlying operating system,
the alarm {system_memory_high_watermark, []} is set.

If any Erlang process Pid in the system has allocated
more than a certain amount of total system memory, the alarm
{process_memory_high_watermark, Pid} is set.

Alarms are reported to the SASL alarm handler, see
alarm_handler(3).
To set an alarm, alarm_handler:set_alarm(Alarm) is called
where Alarm is either of the alarms specified above.

The alarms are cleared automatically when the alarm cause is no
longer valid.

The function
get_memory_data()
can be used to retrieve the result of the latest periodic memory
check.

There is also a interface to system dependent memory data,
get_system_memory_data().
The result is highly dependent on the underlying operating
system and the interface is targeted primarily for systems
without virtual memory (e.g. VxWorks). The output on other
systems is however still valid, although sparse.

A call to get_system_memory_data/0 is more costly
than a call to get_memory_data/0 as data is collected
synchronously when this function is called.

The total system memory reported under UNIX is the number of
physical pages of memory times the page size, and the available
memory is the number of available physical pages times the page
size. This is a reasonable measure as swapping should be avoided
anyway, but the task of defining total memory and available
memory is difficult because of virtual memory and swapping.

The following configuration parameters can be used to change
the default values for time intervals and thresholds:

memory_check_interval = int()>0

The time interval, in minutes, for the periodic memory check.
The default is one minute.

system_memory_high_watermark = float()

The threshold, as percentage of system memory, for how much
system memory can be allocated before the corresponding alarm
is set. The default is 0.80 (80%).

process_memory_high_watermark = float()

The threshold, as percentage of system memory, for how much
system memory can be allocated by one Erlang process before
the corresponding alarm is set. The default is 0.05 (5%).

memsup_helper_timeout = int()>0

A timeout, in seconds, for how long the memsup
process should wait for a result from a memory check. If
the timeout expires, a warning message "OS_MON (memsup) timeout" is issued via error_logger and any
pending, synchronous client calls will return a dummy value.
Normally, this situation should not occur. There have been
cases on Linux, however, where the pseudo file from which
system data is read is temporarily unavailable when the system
is heavily loaded.

The default is 30 seconds.

memsup_system_only = bool()

Specifies whether the memsup process should only
check system memory usage (true) or not. The default is
false, meaning that information regarding both system
memory usage and Erlang process memory usage is collected.

It is recommended to set this parameter to false on
systems with many concurrent processes, as each process memory
check makes a traversal of the entire list of processes.

See config(4) for
information about how to change the value of configuration
parameters.

EXPORTS

Returns the result of the latest memory check, where
Total is the total memory size and Allocated
the allocated memory size, in bytes.

Worst is the pid and number of allocated bytes of
the largest Erlang process on the node. If memsup
should not collect process data, that is if the configuration
parameter memsup_system_only was set to true,
Worst is undefined.

The function is normally asynchronous in the sense that it
does not invoke a memory check, but returns the latest
available value. The one exception if is the function is
called before a first memory check is finished, in which case
it does not return a value until the memory check is finished.

Returns {0,0,{pid(),0}} or {0,0,undefined} if
memsup is not available, or if all memory checks so far
have timed out.

Changes the time interval, given in minutes, for the periodic
memory check.

The change will take effect after the next memory check and is
non-persistent. That is, in case of a process restart, this
value is forgotten and the default value will be used. See
Configuration above.

Changes the threshold, given as a float, for process memory
allocation.

The change will take effect during the next periodic memory
check and is non-persistent. That is, in case of a process
restart, this value is forgotten and the default value will be
used. See Configuration
above.

Changes the threshold, given as a float, for system memory
allocation.

The change will take effect during the next periodic memory
check and is non-persistent. That is, in case of a process
restart, this value is forgotten and the default value will be
used. See Configuration
above.

The change will take effect for the next memory check and is
non-persistent. That is, in the case of a process restart, this
value is forgotten and the default value will be used. See
Configuration above.