前言

前几天一个接口rpc调用忽然一时间报错十几次,报错信息是反序列化错误,经过排查是因为线程池满了,导致返回结果为null,我们自己在null的情况下默认将"{}"转成对应对象,所以基本类型不满足条件导致反序列化错误。

但是线程池报错没有打日志,所以如果不是类型转换错误,甚至都没能感知到bug。所以看一下源码为什么没有打日志。

线程池满了报错排查

经过一层层的调用,找到MainClientExec.java执行execute()获取连接池,因为线程池满了,而超时时间又只设置了1s,抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool。
虽然这个在获取连接的时候有两个catch,而事实上ConnectionPoolTimeoutException并不在属于这两种类型报错,所以只是跳出方法抛出错误了。

然后在RetryExec.java里面抛出连接超时异常

报错日志打印

抛出错误,最后在SynchronousMethodHandler.class处理打印日志,但是因为日志等级设置原因所以没有打印。

解决

原来的项目已经重写了ApacheHttpClient,只要我们能够拿到线程池就能对线程池状态进行监控。
HttpClientBuilder里面初始化PoolingHttpClientConnectionManager连接池。

所以在重写的xxxFeignHttpClient里面传入一个自定义的连接池,就能监控到PoolState连接池状态。

PoolState连接池状态

PoolState中的四个字段:
available:当前正在使用的连接数大小
leased:当前闲置的连接数大小
pending:当前正在等待连接的线程数大小
max:当前总的连接数大小

能拿到连接池的状态,就在自定义的Client执行的时候catch掉IOException并且处理就可以了。



这里就感知到错误并且进行了相应处理了。

一次Rpc调用报错排查相关推荐

  1. ORACLE表有逻辑坏块时EXPDP导出报错排查

    某用户反馈EXPDP导出脚本异常中断,接入排查后发现导出某表时报错,后台ALERT日志中也有相应报错:最终确认排查为逻辑坏块问题,经沟通得知为某个时间段的备份表,后续排除此表后重新设置EXPDP脚本, ...

  2. 线上问题处理-feign调用报错(Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) )

    线上问题处理-feign调用报错 业务场景:服务1通过Feign调用服务2,测试阶段一切正常,线上有数据丢失(为避免敏感本地简单复现了下).报错如下: 2021-12-04 13:47:47.774 ...

  3. Feign的调用报错时,降级处理方式,fallBackFactory

    Feign的调用报错时,降级处理fallBackFactory 项目结构: 代码: remoteCdsService package com.gsafety.framework.api;import ...

  4. mysql报错排查总结

    mysql报错: [root@zabbix ~]# mysql ERROR 2002 (HY000): Can't connect to local MySQL server through sock ...

  5. golang 同一个包中函数互相调用报错 undefined 以及在 VSCode 中配置右键执行整个包文件

    1. 代码结构 demo 文件夹下有两个文件,分别为 hello.go 和 main.go ,结构如下: wohu@wohu:~/GoCode/src$ tree demo/ demo/ ├── he ...

  6. 常见问题一之项目报错排查

    项目报错是一件令人头疼的事情,我们如何去排查也是有一定方法的 1.首先打开eclipse的windows选项 2.然后打开problems查看报错原因,我这个示范没有错误,只是展示解决思路 转载于:h ...

  7. idea install 失败_idea maven install 卡住,无报错排查。

    今天使用idea打包,执行install,看控制台日志,卡主了(意思是日志不继续在控制台输打印了,卡主了,也看不到错误),也没有报错,然后进行排查. 进入dos命令,进入到项目的根目录,使用 运行 m ...

  8. 【Linux开发】OpenCV在ARM-linux上的移植过程遇到的问题1---cvNamedWindow调用报错的问题...

    问题描述: 这个实际上是最后一部的问题,将生成的共享库文件放入到了/usr/local/opencv-arm/lib下,并且设置了LD_LIBRARY_PATH中为/usr/local/opencv- ...

  9. manage.py和simplejson调用报错解决

    2019独角兽企业重金招聘Python工程师标准>>> 1. 调用manage.py报错 在安装Mathematica的开源替代版Mathics后初始化时,调用manage.py报错 ...

  10. 海康威视接口调用报错处理

    1.批量添加人员 处理方法: 注:身份证有些服务器配置的时候可能会必填,且不能重复 2.人脸添加接口问题 图片压缩为base64后需要在10KB-200KB之间,上传的base64需要丢掉头,从/9开 ...

最新文章

  1. 优秀开发者必备技能包:Python调试器
  2. rocketmq python 一个进程订阅多个topic_玩转不同业务场景,这些RabbitMQ特性会是得力助攻...
  3. 835 由于安全层无法对远程计算机进行身份验证_干货 | 看黑客都是这样远程桌面安全设置...
  4. 编译原理 - 实验三 - 递归下降语法分析器的调试及扩展
  5. 移动社交如何玩?网易云信携手崽崽和Uki打造更多新场景!
  6. (二)ElasticSearch6.1.1 Python API
  7. MySQL5.6.26升级到MySQL5.7.9实战方案
  8. 免费中文Python电子书
  9. AD2S1210的使用总结
  10. 马氏距离(Mahalanobis Distance)
  11. 计算机辅助英语教学 研究背景,信息时代背景下的英语教学(原稿)
  12. 两条纵坐标折线图绘制
  13. “碳排放”挑战当前,维谛技术(Vertiv)带来节能改造最佳实践
  14. 设计模式之状态机模式
  15. ZooKeeper 的 Watch 机制是什么?
  16. 【SQL Server】无需公网IP,就可以远程连接SQL Server数据库
  17. weico.cc微博链接
  18. 王者荣耀断线显示重连服务器失败,王者荣耀掉线后进不去
  19. 【OBS】Dropped Frames And General Connection Issues
  20. AD域建设管理(二)| python3+ldap3管理AD域实践(批量创建OU、用户、改密码、更新OU与用户)

热门文章

  1. 左程云中级提升班-9在有限时间内获得最大奖励以及需要的最少时长问题
  2. 物联网平台开发接口http/mqtt,支持部标808/1078协议对接
  3. 香港公司章程中英文样本
  4. 搭建虚拟局域网云服务器,搭建虚拟局域网云服务器
  5. MongoDB——客户端Robo 3T v1.4.3 安装
  6. 网络安全篇 全局ACL与URPF-12
  7. VBM_DARTEL算法对灰质变化的计算
  8. 微信小程序在js中的data里定义对象
  9. python做数字识别_用python实现手写数字识别
  10. 用神经网络实现手写数字识别