解决feign.RetryableException: Connection reset executing POST异常

生产环境突然发现feign.RetryableException: Connection reset报错信息,一开始怀疑是服务问题,经排查服务均正常。最后想起最近修改的线程池配置从代码写死改为配置文件,去检查线程池配置,发现核心线程数代码以前是30,现在配置改为了10。把线程池核心线程数,最大线程数改为30,60。之后就没有再发现错误信息了。

核心线程数一开始按照标准算法去估算,实际发现生产不够用,扩大后才正常,扩大后已经偏离标准算法,这里还是有疑惑的,因为这里核心线程数跟cpu的关系就搞不清楚了。。
最终看了这篇文章后,得到解惑:https://www.jianshu.com/p/f9aa31cfe610

计算核心线程数:
逻辑CPU的数量=物理CPU的数量x单个CPU的内核数x2
所以4核CPU=8逻辑CPU数量
那么
核心线程数=8x2+1=17,那么设置大一点就取20。
最大线程数=20x2+1=41。

1.feign.RetryableException: Connection reset异常

feign.RetryableException: Connection reset executing POST http://xxxxxxx/v1/house/info?id=xxxxxxxx
	at feign.FeignException.errorExecuting(FeignException.java:249)
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:129)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89)
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100)
	at com.sun.proxy.$Proxy195.info(Unknown Source)
	at com.dtyunxi.redex.center.worksheet.acl.service.workaclimpl.WorkDutyNumApiImpl.getDecorationStandard(WorkDutyNumApiImpl.java:41)
	at com.dtyunxi.redex.center.worksheet.biz.apiimpl.WorkDutyApprovalApiImpl.getWorkOrderRespDtoList(WorkDutyApprovalApiImpl.java:1069)
	at com.dtyunxi.redex.center.worksheet.biz.apiimpl.WorkDutyApprovalApiImpl.info(WorkDutyApprovalApiImpl.java:520)
	at com.dtyunxi.redex.center.worksheet.biz.apiimpl.WorkDutyApprovalApiImpl$$FastClassBySpringCGLIB$$908740da.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:210)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
	at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
	at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
	at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
	at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)

2.修改线程池配置

spring:
  #线程池配置
  task:
    execution:
      thread-name-prefix: task-
      pool:
        #核心线程数
        #CPU密集型:核心线程数 = CPU核数 + 1 【机器学习、视频转码】
        #IO密集型:核心线程数 = CPU核数 * 2 + 1Web应用】——当前使用
        core-size: 30
        #最大线程数=核心线程数 * 2
        max-size: 60
        #队列容量
        queue-capacity: 1000
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: feign.retryableexception: read timed out executing post 是一个错误提示,意思是在执行 post 请求时读取超时了。可能是因为网络连接不稳定或者服务器响应时间过长导致的。建议检查网络连接和服务器状态,或者尝试增加请求超时时间。 ### 回答2: "feign.retryableexception: read timed out executing post" 这个错误信息通常是由于Feign客户端在执行POST请求时,读取响应超时了而导致的。Feign客户端是一个服务消费者,它能够通过像发送HTTP请求一样发送请求到服务提供方,并获取到响应结果。在Feign中,当执行POST请求时,客户端会等待服务提供方响应的结果,当等待的时间超过了指定的时间,就会出现"read timed out executing post"这个错误信息。 这个问题一般会发生在网络环境比较复杂或者网络质量比较差的情况下。解决这个问题的方法有以下几种: 一、增加连接超时时间和读取超时时间。可以通过配置Feign客户端的连接超时时间和读取超时时间来解决这个问题。例如,将连接超时时间设置为30秒,读取超时时间设置为60秒,以防止由于响应慢而出现timeout异常。 二、检查网络和服务提供方是否正常。timeout异常有可能是服务提供方出现问题导致的,因此我们需要检查服务提供方是否可用,网络是否稳定,防止因网络问题而出现的timeout异常。 三、设计前端重试机制。对于网络环境不稳定的场景,我们可以设计前端重试机制来解决这个问题。例如,当出现timeout异常时,可以让客户端重试一定次数,或者等待一段时间再进行下一次尝试。 在实际的开发中,我们应该根据实际的需求和环境去选择合适的解决方案,以保证系统的可靠性和稳定性。 ### 回答3: Feign是一个使用Java编写的HTTP客户端框架,它可以帮助我们在客户端中定义我们的API接口,同时也可以处理服务器的返回结果。在使用Feign时,有时会遇到一个错误,即“feign.retryableexception: read timed out executing post”。这个错误通常是由服务器响应过慢或者网络故障引起的。如果我们在使用Feign时遇到了这个错误,可以通过以下几种方式来解决: 第一种方法是增加超时时间。在Feign中,默认的超时时间是10秒钟,如果服务器响应时间超过了这个时间,就会抛出“read timed out”异常。可以通过在@FeignClient注解中设置connectTimeout和readTimeout参数来增加超时时间,例如: @FeignClient(name = "service", url = "http://localhost:8080", connectTimeout = 5000, readTimeout = 5000) 这个示例将连接超时时间和读取超时时间都设置为5秒钟。 第二种方法是检查服务器的响应时间。如果服务器响应时间过长,也会导致Feign超时并抛出异常。可以通过使用类似curl或者Postman这样的工具,来测试服务端的响应时间,并对服务器性能进行优化。 第三种方法是检查网络连接。如果网络连接不稳定,也可能导致Feign超时并抛出异常。可以通过ping命令或者其他网络连接测试工具来检查网络连接质量。 最后,还可以通过捕获异常并重试来解决这个问题。可以在Feign调用的方法中,使用try-catch语句捕获Feign.RetryableException异常,并进行重试操作。可以使用Spring Retry等框架来实现重试机制。 总结来说,Feign.retryableexception: read timed out executing post这个错误通常是由服务器响应过慢或者网络故障引起的。在使用Feign时,可以通过增加超时时间、优化服务器性能、检查网络连接、以及捕获异常并重试等方式来解决这个问题。希望本回答对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值