一次接口性能优化总结

背景

公司推荐服务接口qps为230左右,与业务需求差距较大,需要对该接口进行优化提升qps。

测试

学习压测工具使用,对测试服务器进行压测,测试结果qps为260左右,与测试组同事测试结果差别不大。且在压测的时候发现一部分服务请求不能被响应,返回503服务不可用的错误。

问题排查

● 服务不可用问题排查

对服务容器资源占用进行查看,容器资源占用曲线如下:
一次接口性能优化总结_第1张图片

随着资源占用不断增加,在特定时间点出现断崖式下跌,然后继续增加。不断循环往复。结合部分服务请求报503服务不可用错误出现的时间与资源占用下跌时间一致。推测该现象出现原因为随着服务请求增多,容器资源占用增多,达到或超出容器资源申请上限。k8s强制容器重启导致。
通过限制jvm运行参数限制服务进程占用的系统资源,使之无法达到容器资源限制,可以避免容器被强制重启,保证服务的可持续性。

对jvm进程占用资源进行限制后,服务并发量也稳定在了260qps左右,容器资源使用情况如下:
一次接口性能优化总结_第2张图片

从上面的图中可以看出,当jvm进程占用的容器总资源被限制住时,没有再出现重启导致服务不可用的情况。
● 服务器性能低问题排查
进入容器终端,查看jvm进程gc状况,具体如下:
一次接口性能优化总结_第3张图片
从上图可以看到,jvm进程中eden区与old区几乎被打满,并开始频繁fgc。出现该问题的原因为大量请求来不及处理,请求数据被缓存,导致jvm中eden区与old区被打满,且频繁fgc进一步消耗了cpu资源,导致服务器处理能力进一步下降。解决该问题简单粗暴的办法为增加系统资源,增强服务器请求缓存能力和处理能力。
通过将服务器资源调整为4c8g,可以将系统资源处理能力提升至2kqps左右。压测结果截图如下:
6ab078c6-9683-4459-afbd-a4088fdd0e3d.png

后续优化

可以从降低cpu/内存等系统资源占用,提升性能,规范代码书写方式等方面对程序进行进一步优化。

你可能感兴趣的:(一次接口性能优化总结)