性能测试 - 尽管 API 只返回一个空字符串,但 TPS 还是慢到爬行?

问题描述

所以我遇到了一些我不理解的性能问题。

我有一个 SpringBoot Rest API 应用程序,我正在测试一个 GET 请求,该请求进行一些外部服务调用。无论我在测试中投入多少用户,它都有稳定的 TPS。我投入的用户越多,响应时间就越长,但 TPS 保持稳定,应用永远不会慢到爬行。

然而,为了测试基准性能,我更改了 API,因此它不会进行任何外部服务调用并仅返回一个空字符串。响应时间从 300-400 毫秒提高到 30 毫秒,TPS 飙升。但是,它现在不能在很长一段时间内处理超过 10 个用户如果我给它超过 10 个用户性能会随着时间的推移而降低到爬行,尽管如此简单的 GET 请求返回一个空字符串。

这里会发生什么?这是正常行为吗,我如何才能找到更多信息并进一步调试。谢谢!

解决方法

但是现在不能长时间处理超过 10 个用户

经典 memory leak,使用 APM tool 或分析器工具,如 JProfilerYourKit - 它应该为您提供有关导致问题的函数的更多信息。

或者(或另外)使用静态 code analysis tool,它可能会检测未关闭的句柄、连接、静态对象、没有 hashCode()equals() 的设计不佳的对象实现的功能等