性能优化之峰值80万QPS的接口性能优化

优化前后对比

优化前tp99和服务器资源



优化后tp99和服务器资源




问题的具体排查

优化思路、硬件的负载、tomcat的使用情况分析

https://www.jianshu.com/p/8e032ff74501

问题1:去除额外的线上切换

源代码值使用了thenAcceptAsync,在线程执行完后切换线程,交给另一个线程执行赋值。可以看到相对简单,但是多了一次线程切换的额外开销


将赋值部分直接加入原操作,减少了一次额外的线程开销。


问题2:过多的线程带来的额外开销

首先明确一个事情,线程越多不代表接口耗时就会越低,反而可能是一种负担,线上的上下文切换是会有内存和CPU消耗的。



通过ARMS可知,闲置的线程过多,明显存在浪费的情况。降了了线程池的数量,使用率其实还是在地位,为了应对突发流量(QPS可能从15万直接翻倍到30万)预留的线程数相对较高

问题3:降低redis连接的开销

过多的线程池连接会不仅仅会浪费资源,还是间接的升高TP99,所以不要过多

java配置*节点数=真实的连接数量


问题4:阿里云LB的限制

这个没有具体的截图,阿里的LB有个限制, 每个LB能挂在的节点数量是300个.

而这个服务额外给监控开了个端口占用了XXX个节点,当时发现的时候占用了120个,真实给到服务的节点其实只有180个,释放了那个监控节点

优化后的成果展示

tp99:30ms左右降低到10ms左右

服务器占用:从35个节点到180个节点左右



redis资源节省:节省了一台4T的redis,直接收益每月16万

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容