We all know that Erlang / OTP supports hot code swaping with no downtime. But how do you upgrade OTP itself on a running production system? Can it be done on a machine without stopping the running application?
Upgrade Releases need to include ERTS and can upgrade between different versions of ERTS.
However, while certain parts of OTP do require restarts (e. g. the Erlang Kernel), the Release upgrade process should take care of this for you with minimal downtime.
You can read more about upgrading when Erlang/OTP has changed in the Erlang documentation:
http://erlang.org/doc/system_principles/upgrade.html
Some versions can be upgraded, some can’t. Every Erlang release includes information (for each application) about what can be upgraded. They also include relevant .appup
files that instruct the release handler to do the correct thing (in the worst case they contain an instruction to restart the VM).