调用链路 :
浏览器 --> nodeJS --> Java
nodeJS 和 Java 分别部署在docker 中。
排查步骤:
1. 初始考虑是镜像或者防火墙原因:
排查结果: 容器访问日志中抓取的结果会体现请求体个别的比较小。但是未能明确请求体和实际出现问题的请求是一次请求。所以这个未能体现出问题。
2. 加大运行内存,增加运行实例。
效果: 发生频率明细降低。非压测情况难出现。但是还是会偶发。 未能根本解决。
3. 网络上类似状况搜索: 原文 https://my.oschina.net/forever9999/blog/4297946
原因:
一旦系统中存在异步线程,在服务器高负荷状态下,异步线程可能发生延迟,导致响应已经返回了,但是异步线程仍然可以读取活动中的请求参数。但请求对象是同一个对象复用的,在调用getParameter(String)之类的方法后,现存的下一个请求(或者正在执行的请求)中的didQueryParameters变量就会被置为true,如果该请求正在被包装处理,那么就会在后续的处理过程中,因为变量值发生变化而被认为请求参数已经无法读取,从而发生异常。 解决方法也很简单,从异步线程中去掉getParameter的直接调用即可恢复正常。
按照3中的方向排查多日,最终偶然情况下部门老大发现问题所在!>> 修改>> 验证>> 解决
附我们原来影响的代码:
