我们写的程序不可能都没有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
分享到:
相关推荐
标题中的"erlang-23.2.3-1.el7.x86_64.rpm"和"erlang-23.2.1-1.el7.x86_64.rpm.rar"代表了两个不同的Erlang版本。`.rpm`文件是用于Red Hat Enterprise Linux (RHEL) 和其衍生发行版如CentOS的软件包管理格式,而`....
erlang-solutions-1.0-1.noarch.rpm erlang-solutions-1.0-1.noarch.rpm
在标题"erlang-22.3-1.el7.x86_64.rpm"中,我们可以解读出几个关键信息: 1. **版本号**:22.3-1表示这是Erlang的一个特定版本,22.3是主版本号和次版本号,而-1可能代表修订或更新次数。 2. **操作系统兼容性**:...
esl-erlang_25.0.3-1_centos_7_amd64.rpm erlang_25.0.3-1 rpm用于rabitmq基础环境安装
在标题中的"erlang-18.3-1.el7.centos.x86_64.zip",我们看到的是Erlang的一个特定版本,18.3,针对64位的CentOS 7操作系统(el7)的安装包。这个版本的Erlang包含了必要的组件和服务,使得它能够在CentOS 7上稳定...
erlang-21.3-1.el7.x86_64.rpm rabbitmq基础语言环境。
erlang_23.0.2-1版本 centos7 64bit esl-erlang_23.0.2-1_centos_7_amd64.rpm
erlang-xmerl-22.3-1.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
esl-erlang_24.2.1-1_centos_7_amd64.rpm
Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...
erlang-24.0.3-1.el8.x86_64.rpm资源
erlang-24.3.3-1.el9.x86_64.rpm centos
标题中的"erlang-19.0.4-1.el7.centos.x86_64.zip"揭示了我们讨论的是Erlang的一个特定版本——19.0.4,该版本针对的是Linux发行版CentOS 7的64位架构。Erlang的版本号通常包括主要版本号、次要版本号和补丁版本号,...
erlang-xmerl-23.0.2-2.el7.x86_64.rpm,rabbitMQ安装需要依赖此环境。Erlang 是一种多用途编程语言,主要用于开发并发和分布式系统。它最初是一种专有的编程语言,Ericsson 使用它来开发电话和通信应用程序。
安装过程通常通过命令行工具如`yum`或`dnf`进行,命令可能是`sudo yum install erlang-19.0.4-1.el7.centos.x86_64.rpm`或`sudo dnf install erlang-19.0.4-1.el7.centos.x86_64.rpm`,具体取决于你的系统配置。...
error: /tmp/esl-erlang_26.0.2-1~alinux~3_x86_64.rpm : not an rpm package (or packape manifest): arning: /tmp/rabbitmg-erver 3.12.4-1 all.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY ...
erlang-20.3-1.el7.centos.x86_64.rpm
erlang-23.2.1-1.el7.x86_64.rpm
erlang-23.1-1.el8.x86_ ,erlang官网下载很慢,所以提供该下载链接。