Erlang热部署 - 心跳机制(heart)

我们写的程序不可能都没有bug,特别是项目越做越大,代码越来越多的时候,系统出错导致崩溃的可能性越来越大。而很多时候引发系统崩溃的来源可能不是致命性的,比如程序长时间运行,操作系统资源调度问题,或者是偶然的系统突发问题等等。那么,如何防止erlang猝死导致服务的长时间中断,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 命令
1> heart:get_cmd().
{ok,"erl -heart"}

% 设置临时 HEART_COMMAND 命令
2> heart:set_cmd("heart -shutdown").
ok

% 获取 HEART_COMMAND 命令,当临时 HEART_COMMAND 命令设置时取了 临时命令的值
3> heart:get_cmd().
{ok,"heart -shutdown"}

% 清除临时 HEART_COMMAND 命令
4> heart:clear_cmd().
ok

% 获取 HEART_COMMAND 命令
5> heart:get_cmd().
{ok,"erl -heart"}

也就是说erlang HEART_COMMAND 命令有两种形式:全局环境变量的和临时变量。如果临时命令存在则取执行临时命令。

关闭erlang心跳

有可能我们要临时关闭erlang,对erlang程序进行维护。这时就要就要关闭erlang心跳,否则将无法关闭erlang。关闭erlang心跳方法很简单,如下:

6> q().

参考

http://blog.csdn.net/mycwq/article/details/18306753

http://www.erlang.org/doc/man/heart.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值