Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204680
  • 博文数量: 39
  • 博客积分: 1057
  • 博客等级: 准尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-27 20:13
文章分类

全部博文(39)

文章存档

2012年(24)

2011年(15)

分类: 系统运维

2012-08-06 11:47:42

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

点击(此处)折叠或打开

  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的理念:容错。


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