接口性能优化日记

背景

功能冒烟演示的时候,发现一个接口的返回时候有时会执行5秒才返回,被测试提了一个问题。这个接口是我负责,所以需要我去处理。

过程

一开始,我不知道如何入手,于是我在一些可能会导致耗时的代码前后加上了log日志,打印耗时(比如http调用,mysql操作)。

然后被pm说了,他说可以通过"听云"查看接口性能。

我去,还有这么牛逼的系统吗!

登录"听云"后,我找到了我那个接口,可以看到io网络、code、sql、nosql的耗时,真的很牛逼。

回到正题,这个接口耗时5秒多,有5秒是耗费在了一个方法调用上(远程调用)。于是我就兴冲冲拍板,心想直接把这个调用改成异步不就得了!

我将这个远程调用方法改成了异步,然后提交代码。不久pm跟我说,你这样改,项目都被你改崩了。

我想:我去?异步还能崩?

pm:"这个远程调用,占了5秒,你整个接口耗时才5秒多,你即使把整个远程调用异步,你最多节省一百毫秒,这能解决问题吗?"

我想:"有道理啊,我这个蠢蛋!"

pm:"这个调用涉及到zookeeper单机,且服务器性能都很差,所以调用会很慢,你可以把它改成feign调用就好了!"

我想:"牛逼!"

总结

接口性能优化,我们本能会想到

  1. 现状:压测目前接口性能吞吐(知道性能到底多差)
  2. 定位:哪个步骤导致性能低
  3. 解决:针对问题进行解决
  4. 回归:重新压测,确认是否已经改好

其中解决的手段就是异步、缓存。

但我这次的问题就是异步、缓存都无法解决的,因为这个问题的耗时,占用整个接口耗时的99%。

有时候我们要多想!

相关推荐
方也_arkling6 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮6 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei116 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1126 小时前
web-第一次课后作业
java·开发语言·idea
秋96 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本7 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
DIY源码阁7 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
basketball6168 小时前
C++ NULL 和 nullptr 区别 以及 nullptr 的核心实现
java·开发语言·c++
JAVA面经实录9179 小时前
MyBatis面试题库
java·mybatis
小江的记录本9 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试