背景
最近公司接入ADX广告竞价相关业务。需要我们做ADX竞价系统。该业务有一下特性:
- 请求量巨大 6W+QPS
- 媒体方要求询价接口延时极低 65ms内返回。(很多大厂都要求30ms)
- 对于我们公司来说业务复杂性又很高。
我们在接入媒体方ADX询价业务时,我们申请了75台机器(8c16g)。但是只能支撑起7k的的QPS。
(不要鄙视我们,因为要快速响应业务。系统都是在老系统上修修补补上去的)。平均单台机器吞吐在100不到。主要的瓶颈是CPU。当单机QPS达到100时,CPU已经到达了75%,线上已经告警了。
所以我们问题点就在cpu上。OK我们开始吧。
分析
一般CPU问题,大概方向
- GC问题
- C2编译问题
- IO问题
- 代码复杂度过高
我们这个ADX引擎系统。没有IO。并且系统都有灰度预热。所以2、3直接可以排除。
GC问题:
查看CAT监控图:
上图可以看到GC 每分钟平均 发生miorGC 25次。每分钟 gc耗时0.6s
通过 jinfo -flags pid
查看启动参数。两个参数比较异常:
-XX:MaxGCPauseMillis=20ms
-XX:G1ReservePercent=25