-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
error [ECONNRESET] occurred: read ECONNRESET #2805
Comments
As you mentioned, there is no extra plugins used so it's no related to egg-socket.io or any other egg.js library. Maybe similar to this issue. |
@johnnychq 一样的问题,本机正常,阿里云线上日志疯狂输出这个错误。你解决了吗? |
cc @JacksonTian |
@atian25
2.在阿里云线上环境运行,关闭日志插件的标准输出,不会报错。但是阿里云日志服务也无法采集标准输出的日志
另外,同事使用Think.js,能正常采集标准输出,不会报这种错误。 |
关键是这个吧:在阿里云线上环境运行,打开日志插件的标准输出,疯狂报错,每秒4条。 |
你先关掉采集,然后检查下 stdout 上究竟是怎么回事。 |
@Benny233 还没解决,原始错误是在common-error.log中的 |
重新安装下全部依赖,不要锁版本,再看看。 这个看起来是某个请求挂了,不确定你是不是自行引入什么模块做了什么,请提供可复现方式。 |
好,我试一下 |
@johnnychq |
@changchengqin � |
@johnnychq 前几天,我们部署以后,访问所有的接口,浏览器监控一直pending,服务端日志也是显示这样的错误: 后来,我们把 egg-cluster(因为我们要自定义端口,必需通过配置egg-cluster来实现) 的一个配置项,listen.hostname 删除了,就正常了,之前listen.hostname是按照官方文档配置的127.0.0.1,如下图: 但是,今天,部分接口偶尔性的又出现了上述问题,前端浏览器监控一直pending,服务端日志也是显示这样的错误: |
@changchengqin 我们是通过egg-scripts启动的,cluster的配置都是默认的,不需要进行配置。 现在比较麻烦的是阿里云的日志不能添加白名单过滤掉这类错误;包括监控也不能添加白名单。 |
@johnnychq @changchengqin 原因找到了。 我们用的腾讯云,它做了负载均衡,会通过head方法轮询探测它方向代理的服务,然后它主动断开了。 你可以打印一下所有外部http请求,肯定能看到。 我们的解决办法就是直接将这个探测关闭。 |
。。。 @bymaxchen 是 head / 这个地址么? |
谢谢 @bymaxchen 的提醒,问题出现的原因找到了,是SLB健康检查导致的 ,事情原委如下: 首页,问题发生的SLB TCP 4层SLB健康检查。(7层这里不作展开,自己尝试) 其次,4层SLB健康检查中,如果开启HTTP健康检查(其中要配置健康检查的路径),这时候健康检查的原理是发送 如上图,我错误的误以为自己配置的 配置了 但是,即使正确处理了 |
先抛下现象:
结论就是采用HTTP SLB的健康检查即可,TCP SLB的HTTP健康检查为什么不行已经提工单给阿里云。 其中,我猜测,TCP SLB健康检查假定每2s作一次健康检查的时候,会并发同时发10个请求,如果有成功的后面的请求会cancel掉,不知道这个猜测是否站得住脚。 |
另外,补充一个点,经过测试,这个报错跟是否HEAD请求没关系。原因:
|
也遇到了一样的问题,尝试按照这个方法修复 |
@johnnychq cool~ 有最新进展不? |
#2924 这个来解决 |
@atian25 有进展,通过工单跟阿里云的人进行过较充分沟通,本质上的原因就是SLB健康检查导致的,跟head请求没关系(另外head问题自身比较复杂,无论slb还是egg框架都会有兼容处理,因此会干扰判断和分析)。 其中,SLB检查导致此问题出现的原因也比较简单,4层(tcp)SLB检查只会做简单TCP的三次握手,并主动断开连接,因此egg框架会报错。另外,4层(tcp)SLB检查中提供的HTTP健康检查是个伪的http,内部实现也会主动断开tcp连接,这个点找阿里云的人工单check过了。 所以,如果采用4层SLB,并开启健康检查就会必现上述错误。避免的方法有:
另外,4层SLB健康检查导致上述现象是主要的原因,以及可以被验证、复现、解释的。但互联网中好像存在大量无效tcp连接,因此还会时不时出现ECONNRESET报错。我们这边改成7层SLB检查后,规律性ECONNRESET基本消失,但还是偶有出现。 |
@johnnychq 是的,不过阿里云可以改成 7 层健康检查的。 |
阿里云生产环境日志报警截图
没有使用任何 插件,google下其他 issue提到 socketio 插件有类似的问题,但我们应用并没有使用这个插件
The text was updated successfully, but these errors were encountered: