博客
关于我
高并发接口调试过程及技巧
阅读量:470 次
发布时间:2019-03-06

本文共 915 字,大约阅读时间需要 3 分钟。

在将代码部署到现网后,厂商遇到了EOF(End of File)问题。通过分析问题表现,发现文件流不完整。进一步排查发现,可能与并发量过大导致接口响应不过来有关。为验证这一猜想,先注释掉MySQL写入逻辑,提升接口性能后再次测试,结果仍存在EOF问题。于是,开始逐步排查性能瓶颈。

首先,在报错时打印CPU、内存、磁盘IO速率,发现这三者都未达到瓶颈,磁盘IO写速度仅剩67MB/s。随后,调整Tomcat连接数配置,但问题依旧存在。于是,简化接口,将其改为最简单的流字节数计算并获取Content Length参数进行比对,试图避免问题的发生。然而,断流问题仍未解决。

为进一步定位问题,建议厂商将他们的demo程序部署到我们的服务器测试。结果发现,他们的程序并未出现断流现象。这表明问题很可能出在我们自己的程序中。尽管已经采用了最基本的流字节遍历方式,但问题依然存在。

在此过程中,我怀疑是否与Spring Boot版本相关。于是,将Spring Boot版本从2.1.13.RELEASE升级到2.7.2,结果问题依然未解决。进一步整理了一个全新的工程,使用2.1.13.RELEASE版本进行测试,结果问题同样未出现。这让我怀疑可能与原工程中的某些切面配置有关,但无法直接验证。

最终,由于客户要求数据报送需要使用HTTPS协议,我整合了HTTPS功能,结果又一次出现了断流问题。此时,问题得以定位。重新整理了一个新的工程包后,出现了另一个问题:厂家在接收数据时偶尔无法读取body中的JSON内容。经过多番测试,问题未出现。后来,厂家自行修改了读取body内容的方式,问题得以解决。

最终,实现了以下效果:每分钟处理1900份数据,2000多次请求,每次50条左右,估算一天可处理1.4亿数据。Tomcat线程配置为:server: port: 8080,tomcat: accept-count: 65535,max-connections: 65535,max-threads: 2000,min-spare-threads: 500以上(基于4核8G内存经验值)。

整个过程持续了大约一周时间,让我几天没得合睡觉。

转载地址:http://jdabz.baihongyu.com/

你可能感兴趣的文章
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>