博客
关于我
高并发接口调试过程及技巧
阅读量: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中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>