浏览 5732 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-18
1.使用etop监控程序时发现输出很多Erlang top got garbage,是不是内存泄露了呢? Erlang top got garbage {trace_ts,<4897.30040.98>,out, {gen,wait_resp_mon,3}, {1263,783491,9919}} Erlang top got garbage {trace_ts,<4897.44.0>,out, {ets,select_trap,1}, {1263,783491,55033}} Erlang top got garbage {trace_ts,<4897.30043.98>,out, {prim_inet,accept0,2}, {1263,783491,55055}} Erlang top got garbage {trace_ts,<4897.19490.97>,out, {gen,wait_resp_mon,3}, {1263,783491,58450}} Erlang top got garbage {trace_ts,<4897.30042.98>,out, {gen,wait_resp_mon,3}, {1263,783491,58535}} Erlang top got garbage {trace_ts,<4897.44.0>,out, {ets,select_trap,1}, {1263,783491,260009}} ======================================================================================== chatapp@localhost 02:58:10 Load: cpu 16 Memory: total 306706 binary 82753 procs 16313 processes 153462 code 3438 runq 0 atom 384 ets 14393 Pid Name or Initial Func Time Reds Memory MsgQ Current Function ---------------------------------------------------------------------------------------- <4897.44.0> chatets 88026518373491 121896 0 gen_server:loop/6 <4897.45.0> chatserver 2612 5147 24608 0 gen_server:loop/6 <4897.29320.98>proc_lib:init_p/5 546 634 24608 0 prim_inet:recv0/3 <4897.29505.98>proc_lib:init_p/5 537 284 6952 0 prim_inet:recv0/3 <4897.29448.98>proc_lib:init_p/5 499 387 11832 0 prim_inet:recv0/3 <4897.29471.98>proc_lib:init_p/5 440 270 5800 0 prim_inet:recv0/3 <4897.29374.98>proc_lib:init_p/5 403 270 5800 0 prim_inet:recv0/3 <4897.29352.98>proc_lib:init_p/5 396 437 24608 0 prim_inet:recv0/3 <4897.29521.98>proc_lib:init_p/5 381 274 5800 0 prim_inet:recv0/3 <4897.29404.98>proc_lib:init_p/5 357 386 16712 0 prim_inet:recv0/3 ======================================================================================== 2.看到很多crash日志,内容为: CRASH REPORT <6431.14236.92> 2010-01-18 10:25:25 =============================================================================== Crashing process initial_call {chatserver,accept_loop, ['Argument__1','Argument__2','Argument__3', 'Argument__4']} pid <6431.14236.92> registered_name [] error_info {error,{case_clause,{error,etimedout}}, [{chatserver,socket_loop,1},{proc_lib,init_p_do_apply,3}]} ancestors [chatserver,<6431.2.0>] messages [] links [#Port<6431.900585>] dictionary [] trap_exit false status running heap_size 987 stack_size 24 reductions 424 是不是很gen_tcp:recv(Sock, 0)这里没有处理超时的错误呢,我看很多代码也没有做处理. 以上两个问题,各位有经验的老大能否给小弟个提示,谢谢! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-19
最后修改:2010-01-19
看到{case_clause,{error,etimedout}}了吗, 也就是说 socket读写超时错误 你都没有处理. 这说明你的系统非常繁忙,超过了erlang的应对能力.
我分析了下 Erlang top got garbage的原因, 最可能的原因就是 因为你的pid在trace_tr收到in的时候还活着, 但是由于进程死掉了, 没有继续给trace发out消息, 所以trace模块就糊涂了, 匹配错了. |
|
返回顶楼 | |
发表时间:2010-01-19
mryufeng 写道 看到{case_clause,{error,etimedout}}了吗, 也就是说 socket读写超时错误 你都没有处理. 这说明你的系统非常繁忙,超过了erlang的应对能力.
我分析了下 Erlang top got garbage的原因, 最可能的原因就是 因为你的pid在trace_tr收到in的时候还活着, 但是由于进程死掉了, 没有继续给trace发out消息, 所以trace模块就糊涂了, 匹配错了. 谢谢yufeng老大指点,这个服务器实现的是一些广播和聊天功能,是不是超过1w个连接已经超过了erlang的应对能力,要考虑开多个节点了? 第二个问题,我菜鸟级别还看不懂啥意思,能否理解是因为第一个问题,系统负载不来而引起的了? |
|
返回顶楼 | |
发表时间:2010-01-19
xiaoshengaya 写道 mryufeng 写道 看到{case_clause,{error,etimedout}}了吗, 也就是说 socket读写超时错误 你都没有处理. 这说明你的系统非常繁忙,超过了erlang的应对能力.
我分析了下 Erlang top got garbage的原因, 最可能的原因就是 因为你的pid在trace_tr收到in的时候还活着, 但是由于进程死掉了, 没有继续给trace发out消息, 所以trace模块就糊涂了, 匹配错了. 谢谢yufeng老大指点,这个服务器实现的是一些广播和聊天功能,是不是超过1w个连接已经超过了erlang的应对能力,要考虑开多个节点了? 第二个问题,我菜鸟级别还看不懂啥意思,能否理解是因为第一个问题,系统负载不来而引起的了? 1. 你的程序写的好坏直接关系到erlang的性能. 不过1W左右的链接在一般的情况下,未调整的程序,应该是可以让你的系统非常忙. 2. 你可以不care这个问题, 就当成没事就好, 那是tracer模块的问题. |
|
返回顶楼 | |
发表时间:2010-01-20
最后修改:2010-01-20
对于socket读写超时,我在官方的帮助文档上面查到这么一句话
The optional Timeout parameter specifies a timeout in milliseconds. The default value is infinity. 我在recv是这么写的: socket_loop(Sock) -> case gen_tcp:recv(Sock, 0) of {ok, Data} -> ... {error, closed} -> ... {error, Reason} -> error_logger:error_msg("error:~w~n", [Reason]) end. 在recv时没有设置超时时间,所以疑惑为什么会出现timeout的error? |
|
返回顶楼 | |
发表时间:2010-01-22
ETIMEOUT应该是TCP层产生的错误,在没启用keepalive选项的时候,还有什么情况会出现etimeout错误呢.这个问题纠结了我几天,一直无法确认是哪里出现问题.
|
|
返回顶楼 | |
发表时间:2010-01-22
最后修改:2010-01-22
这个纠结什么 search下etimeout 把可能出现的地方 都打上日志 就知道什么原因了 不是?
|
|
返回顶楼 | |