RPC出现的一个奇怪问题

问题状况:

自己使用 Pomelo 的 NodeJS 库,写了 Robot,然后在本机开启300个进程,对本机服务器进行测试。
很奇怪的是,每次请求次数到达一个固定数字左右的时候,必然出现 RPC Timeout 。(CPU利用率不高)
和进程无关,尝试开启100的进程,也是到达那个固定数字左右,会出现。只是一个早,一个晚。

尝试方法:

在 app.js 中调整 proxy 超时时间至5分钟 无效
配置内核属性、包括调整 ulimit, kern.maxfilesperproc 等 无效

自己查遍了论坛,发现出现这个问题,似乎都是没有回调导致的。
因为 Robot 基本都是循环几个操作。如果是没有调用回调的话,应该早就出现了才对,并且查看了代码,暂未发现此情况。

昨天升级了 Pomelo 至 1.2.1,情况仍然出现。
自己的开发环境 OSX 10.11.2 NodeJS 5.3.0

求助:

现在不知道是不是系统或环境问题,所以问一下。
- 目前大家在线上的 NodeJS 版本是多少?(在论坛里,看到过有人说0.8比0.10要稳定的帖子)

- RPC Timeout了,Handler不会自动重新发送吗?(我看了一下,服务器一切正常,后面的请求也都是正常的,但是这几个Timeout的没有重新发送,导致客户端与服务器状态不一致,进而出现错误。)

Pomelo 依赖的 WS 库在最近升级到了1.0,完全支持 NodeJS 5,不知道有没有帮助。

标签: pomelo 开发求助
y456134029 在 2016-1-3 20:24发布
y456134029 在 2016-1-4 09:50重新编辑 分享到 weibo
3 回复
#1 {2} roytan 2016-1-3 23:19 回复

和robot没有关系
在你服务器in/out的地方打印输入输出量,当输入远超输出量的时候,会产生大量请求堆积,导致event loop忙,最终无响应

y456134029 2016-1-4 09:37 回复

好像情况不太一样,因为我用100个 Robots 每次执行操作的间隔是1000至3000ms的一个随机数,而且同时发送的可能只有30个样子。其余都是收到上个处理结果的消息后,再回合制轮流的,应该不存在处理不过来的情况。

当每次处理总量到达一个大概固定值的时候,必然有3-5个RPC超时。然而后面的请求又是完全正常的。我是完全没头绪,怀疑是环境或系统问题了。

kezhaoyuan 2016-3-3 22:37 回复

@roytan 请问怎么得到输入输出量?

#2 y456134029 2016-1-4 11:58 回复

刚才在笔记本上测试了一下,也是一样的结果。

fail to process remote message:Error: rpc failed with error code: 5

打算晚上回去切换 NodeJS 版本试试,再不行就上虚拟机安装CentOS,试试。

#3 y456134029 2016-1-5 09:16 回复

昨天晚上试了试把 NodeJS 从 5.3.0 切换到了 0.10.41。

npm install 除了有一些warn提示以外,安装没有其他问题。

重新测试,*居然RPC那里完全没有异常掉线了!!! *
但是0.10的robot无法开启300个,会报child process错误。所以自己使用了200个,操作等待时间降低成了100ms-300ms,也没有出错。

这样的话,暂时就不管这个问题了...等以后再详细测试一下。

强烈建议Pomelo官方能够提供一套线上的稳定环境配置(操作系统/NodeJS版本)供大家参考。至少可以避免因为环境问题入坑。

回到顶部