优化前后对比
优化前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个节点左右

