Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7172192
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类:

2012-08-07 08:06:19

原文地址:Erlang 应用启动策略 作者:努力小伙

近期,一个线上的应用挂掉,导致整个节点上分布的应用收到影响,根绝错误日志,发现原来是在当时的环境(较特殊,一个应用挂掉重启时,会发生匹配错误,导致启动不起来)。匹配错误处理了,接下来就是找为什么节点会挂掉的原因
先把该应用原来的启动配置发下:

点击(此处)折叠或打开

  1. start_xxapp() ->
  2.     case supervisor:start_child(
  3.          game_server_sup,
  4.          {mod_xx,
  5.          {mod_xx, start_link,[]},
  6.             transient, infinity, supervisor, [mod_xx]}) of
  7.         {ok, Pid} ->
  8.             timer:sleep(1000),
  9.             Pid;
  10.         _ ->
  11.             undefined
  12.     end.
根据,OTP设计文档中,启动策略有三类:
1、permanent  应用挂掉之后,其他所有的应用和运行中的系统跟着一起遭遇,都会挂
2、transient     应用收到normal终止信号时,其他应用和运行中的系统不熟影响,收到shutdown终止信号时,效果就和permanent一样了。由于,监督树的终止信号shutdown,所以,启动监督树的时候通常不用这个参数。
3、temporary  独立,该应用的死活不会影响到其他应用和runtine-time system

根据这些规则,将上面的应用启动改成:

点击(此处)折叠或打开

  1. start_xxapp() ->
  2.     case supervisor:start_child(
  3.          game_server_sup,
  4.          {mod_xx,
  5.          {mod_xx, start_link,[]},
  6.             temporary, 2000, supervisor, [mod_xx]}) of
  7.         {ok, Pid} ->
  8.             timer:sleep(1000),
  9.             Pid;
  10.         _ ->
  11.             undefined
  12.     end.
这样,就算是该应用挂掉,该节点和该节点上的其他应用不熟影响,更符合OTP的理念:容错。


阅读(295) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~