一、问题描述
喜闻乐见,我们的应用又又内存飚高了,FullGC告警多到麻木。老套路,dump内存开始分析。
昨日收到一个告警,内容如下:
1 | 2021-11-09 15:01:04 警告, |
昨日夜间接到研发反馈,EDI商家新上线后启动异常,需要协助排查,异常信息为:java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.toString(Ljava/io/InputStream;Ljava/nio/charset/Charset;)Ljava/lang/String;
产品反馈与商家对账时,有单运费金额对不上:本该是10块2,可商家侧收到的是10块1毛9,莫名少了一分钱。然后紧急根据单号查询日志信息。
本场景是消费一个MQ,把消息通过数据转换文件转换为商家侧数据格式,然后推送给商家。其中出问题的字段,仅做了一个逻辑,金额单位由元转分,类似如下:
EDI某商家回传场景近期高频出现Http回传商家超时现象,关键堆栈如下:
1 | Caused by: java.net.SocketTimeoutException: Read timed out |
有这样一个流程:从FTP上下载文件后,会根据文件名读取缓存实现防重,其中缓存读取到的值会写入Camel的exchange,exchange.getIn().setBody(cacheValue);
。
但是,通过日志观察该Body是一串无规律的字符,类似My8+PFNEMvPjxSRU1BUksxLz48UkMRT48TUFUTlI+QVBHTTA0OC02PC9NQVROUj48TUFLVFg+57qi6Imy5Ki75aSn5Y+36LSt54mp6KJWkVTX0RBVEE+PFNJWkU+MDAwPC9VNQVJLMi8+PFJFTUFSSzMvPjxSRU1BUks0Lz48L1NJWkVTX0RBVEE+PC9NQUlOX1RBQkxFPjwvUk9PTUFJTl9UQUJTSVpFPjxXRUlHSFQvPjxMRU5HVEgvPjxXSURUSC8+PEhFSUdIVC8+PElOQ0FTRU1FTlQvPjxFQU5VUKLPVD4D488Uk9PVC9NQUtUW
。
最近为了响应公司“降本增效”,提高资源使用率,我们EDI小组决定要整合edi-db、edi-rest、edi-admin三个springboot应用到一个云主机上,通过Nginx反向代理进行分流。最终配置结果如下图:
昨天研发反馈使用EDI的HTTP调用结点时,http响应报错如下: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
。
上周四研发使用EDI的数据转换时发现el表达式计算结果不正确,即使用el表达式进行除法的时候结果不对。例如:${numVar/1000},其中通过日志里观察numVar的变量值为2,但是结果确实0.