Erlang heart 心跳机制
Posted erlang collect
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Erlang heart 心跳机制相关的知识,希望对你有一定的参考价值。
我们写的程序不可能都没有bug,特别是项目越做越大,代码越来越多的时候,系统出错导致崩溃的可能性越来越大。而很多时候引发系统崩溃的来源可能不是致命性的,比如程序长时间运行,操作系统资源调度问题,或者是偶然的系统突发问题等等。那么,如何防止erlang猝死导致服务的长时间中断,erlang也给了我们答案:erlang心跳机制。
什么是erlang心跳机制?
这是erlang运行时系统定期监控系统是否正常运行的程序。
erlang为什么要心跳机制?
我们都知道,erlang有很多进程监督树,启动了很多supervisor来保证process的高可靠性, 但如果连emulator也死掉了,那erlang也就回天乏术了, 所以这时只能靠heart 来重新启动erlang。
C:\>erl -heart -env HEART_COMMAND "erl -heart"
Eshell V5.10.2 (abort with ^G)
1>
这时候你可以按 CTRL + C 挂起erlang,或者直接关闭 erlang shell 窗口,系统都会重新打开erlang shell
erlang心跳原理
erlang心跳机制的实现原理是启动一个 heart 进程,通过定时发送特定消息来检查erlang是否正常回应,收不到回应则判断erlang没有正常工作。
erlang心跳参数
参数项 | 说明 | 注意 |
HEART_COMMAND | 心跳监控程序发现erlang没正常运行时执行的命令 | 在Windows下还可以调用其他进程或命令 |
HEART_BEAT_TIMEOUT | 心跳超时,如果监控程序发出的检查消息在这个时间没有得到回应,就会执行 HEART_COMMAND 命令,默认60秒,有效范围 10 ~ 65535 如果调整系统时间,而且超过了这个限定,erlang进程也会被重启 | |
ERL_CRASH_DUMP_SECONDS | 用以控制erlangg崩溃时写日志的行为。0表示不写日志;-1表示写完日志再重启erlang;其他表示写入的等待完成时间,如果还没写完也将强制重启。默认0 | 如果这个参数没有设置,erlang就不会写crash日志 |
erlang心跳函数
获取 HEART_COMMAND 命令
heart:get_cmd().
{ok,"erl -heart"}
% 设置临时 HEART_COMMAND 命令
heart:set_cmd("heart -shutdown").
ok
% 获取 HEART_COMMAND 命令,当临时 HEART_COMMAND 命令设置时取了 临时命令的值
heart:get_cmd().
{ok,"heart -shutdown"}
% 清除临时 HEART_COMMAND 命令
heart:clear_cmd().
ok
% 获取 HEART_COMMAND 命令
heart:get_cmd().
{ok,"erl -heart"}
也就是说erlang HEART_COMMAND 命令有两种形式:全局环境变量的和临时变量。如果临时命令存在则取执行临时命令。
关闭erlang心跳
有可能我们要临时关闭erlang,对erlang程序进行维护。这时就要就要关闭erlang心跳,否则将无法关闭erlang。关闭erlang心跳方法很简单,如下:
6> q().
————————————————
版权声明:本文为CSDN博主「没有开花的树」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mycwq/article/details/18306753
以上是关于Erlang heart 心跳机制的主要内容,如果未能解决你的问题,请参考以下文章
获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算