emqx/apps/emqx_machine/README.md

49 lines
2.0 KiB
Markdown

# EMQX machine
This application manages other OTP applications in EMQX and serves as the entry point when BEAM VM starts up.
It prepares the node before starting mnesia/mria, as well as EMQX business logic.
It keeps track of the business applications storing data in Mnesia, which need to be restarted when the node joins the cluster by registering `ekka` callbacks.
Also it kicks off autoclustering (EMQX cluster discovery) on the core nodes.
`emqx_machine` application doesn't do much on its own, but it facilitates the environment for running other EMQX applications.
# Features
## Global GC
`emqx_global_gc` is a gen_server that forces garbage collection of all Erlang processes running in the BEAM VM.
This is meant to save the RAM.
## Restricted shell
`emqx_restricted_shell` module prevents user from accidentally issuing Erlang shell commands that can stop the remote node.
## Signal handler
`emqx_machine_signal_handler` handles POSIX signals sent to BEAM VM process.
It helps to shut down EMQX broker gracefully when it receives `SIGTERM` signal.
## Cover
`emqx_cover` is a helper module that helps to collect coverage reports during testing.
# Limitation
Currently `emqx_machine` boots the business apps before starting autocluster, so a fresh node joining the cluster actually starts business application twice: first in the singleton mode, and then in clustered mode.
# Documentation links
Configuration: [node.global_gc_interval](https://www.emqx.io/docs/en/v5.0/configuration/configuration-manual.html#node-and-cookie)
# Configurations
The following application environment variables are used:
- `emqx_machine.global_gc_interval`: interval at which global GC is run
- `emqx_machine.custom_shard_transports`: contains a map that allows to fine tune transport (`rpc` or `gen_rpc`) used to send Mria transactions from the core node to the replicant
- `emqx_machine.backtrace_depth`: set maximum depth of Erlang stacktraces in crash reports
# Contributing
Please see our [contributing.md](../../CONTRIBUTING.md).