伪代码
public RespData findOrderTest(@RequestParam String orderCode,@RequestParam String strategy) {
TbOrder tbOrder = orderDao.findByOrderCodeAndStrategy(orderCode, strategy);
//do something
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return RespData.success(tbOrder);
}
使用 jmeter 并发调用,查询条件不变,反复查询同一条数据,发现查询速率变慢
正常耗时日志
`---[5054.53776ms] cn.*.PatientAppController:findOrderTest()
+---[54.165884ms] cn.*.TbOrderDao:findByOrderCodeAndStrategy() #349
+---[0.079756ms] javax.persistence.EntityManager:clear() #350
`---[0.018264ms] cn.*.RespData:buildSuccess() #363
测试期间接口耗时逐渐增加,异常耗时日志
`---[29406.81247ms] cn.*.PatientAppController:findOrderTest()
+---[24406.507885ms] cn.*.TbOrderDao:findByOrderCodeAndStrategy() #349
+---[0.036484ms] javax.persistence.EntityManager:clear() #350
`---[0.020533ms] cn.*.RespData:buildSuccess() #363
已排除是数据库性能问题,怀疑是 jpa 内部的实现机制所致,多番测试还是没有找到问题,分享出来给大家看看,请大佬指教
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.