rpc错误:station pending too much for

用pomelo-robot做压力测试的时候发现一个奇怪的现象:
模拟500用户同时在线,然后不断战斗,过几分钟之后会提示[pomelo-rpc] station pending too much
在代码里目前我是在connector里不留handler,客户端连上之后直接请求backend server的handler来处理的(因为需要支持不同协议,所以不想在每个connector对应的frontend里面复制粘贴代码,正好pomelo也有route的)

我在mailstation.js里加了log, 感觉是运行一段时间之后lazyConnect断了就跪了的感觉
<code>
[2014-02-07 11:48:27.937] [WARN] pomelo-rpc - [game-server/node_modules/pomelo/node_modules/pomelo-rpc/lib/rpc-client/mailstation.js] [pomelo-rpc] station pending too much for: woc-server-1
[2014-02-07 11:48:27.938] [INFO] console - client addToPending woc-server-1 [ { logger: undefined,
isEnabled: undefined,
source: 'hybrid-connector-server-1',
remote: 'woc-server-1',
id: 'b40f9820-8faa-11e3-a86f-8df401effc5a',
seq: 1,
msg:
{ namespace: 'sys',
serverType: 'woc',
service: 'msgRemote',
method: 'forwardMessage',
args: [Object] } },
'woc-server-1',
{ namespace: 'sys',
serverType: 'woc',
service: 'msgRemote',
method: 'forwardMessage',
args: [ [Object], [Object] ] },
null,
[Function] ]
</code>

标签:无
qklxtlx 在 2014-2-7 11:58发布 分享到 weibo
7 回复
#1 qklxtlx 2014-2-7 13:50 回复

继续debug发现,问题在于当一段时间之后,mailbox会断开,之后会发起lazyConnect重连,但无法连上貌似……瞬间1000个pending就用满了

#2 qklxtlx 2014-2-7 14:13 回复

继续debug下去发现会出现这个错误

[2014-02-07 14:10:05.551] [ERROR] pomelo - [game-server/node_modules/pomelo/lib/connectors/hybridsocket.js] websocket([127.0.0.1]:[55466]) send binary data failed: {}

目前暂时改大

var DEFAULT_PENDING_SIZE = 1000000;

解决之前的问题(但是没有治本……)毕竟重连过程需要一定的时间

#3 {1} rain1017 2014-5-15 19:36 回复

同遇到这个问题
500在线以上频繁出现 station pending too much 错误
改了pool的值后错误消失

有官方的解答吗?

rain1017 2014-5-15 20:01 回复

把pendingSize的值调了以后暂时运行了一会儿,
但随后又出更严重的问题
rpc send message error: "Error: mailbox alread closed.
不得不重启服务器

#4 py8765 2014-5-16 09:32 回复

重连无法连上?是网络有问题?

#5 {1} EdwardZhou 2014-5-19 10:11 回复

@qklxtlx, 有什么进一步的发现没?

qklxtlx 2014-5-24 12:55 回复

我觉得这个问题在于rpc不稳定,有时候会重连,这时候如果并发请求很多,一下超过mailstation的buffer就这个错误了……

#6 {4} xiecc 2014-5-19 13:37 回复

netstat看下网络状态, 有数据堵在send queue吗?

EdwardZhou 2014-5-19 13:47 回复

用什么参数查看?

xiecc 2014-5-21 13:59 回复

@EdwardZhou netstat -an | grep 相关的ip , 看Send-Q和Recv-Q

qklxtlx 2014-5-26 20:28 回复

因为backend服务失去响应了~我后来加了流控

Vampire 2015-4-9 13:22 回复

@qklxtlx 我也遇到同样的问题了。请问加了流控是什么意思?

#7 {9} skyblue 2014-5-26 16:47 回复

关注,这个问题有结论了吗?

xiecc 2014-5-26 17:19 回复

结论是网络问题,具体网络故障要问作者

qklxtlx 2014-5-26 20:27 回复

@xiecc 结论是front/back之间有大量并发的时候,pomelo-rpc上的链接会断开,这时候并发的请求放在mail station的buffer,超过了之后就有这个提示

qklxtlx 2014-5-27 08:08 回复

@EdwardZhou 嗯哈~这个我开发机上试了下,但是没有Merge回线上的branch~准备压测一下看看再~你那边解决的咋样

EdwardZhou 2014-5-27 09:11 回复

@qklxtlx 我这边没做好压力测试的准备,我昨晚有思考了你这种情况,rpc-zeromq 可能更合适一些。

还有,你是部署到多台服务器还是在同一台上的?rpc断开重连会不会是网络原因导致的?

qklxtlx 2014-5-27 10:53 回复

@EdwardZhou 我一开始是仿照线上环境压了两台服务器,后来为了debug在笔记本上直接跑了小规模的压力测试同样出现

EdwardZhou 2014-5-27 12:39 回复

rpc-zeromq 也是这种情况吗

EdwardZhou 2014-6-17 17:13 回复

@qklxtlx

我最近做了压力测试,模拟了2000人在,跑了一个晚上,没有碰到你的这种情况。一直正常。

qklxtlx 2014-6-17 19:07 回复

@EdwardZhou 我的后台服务器运算压力有点大

回到顶部