关于压测pprof优化记录
map主动释放
问题:底层的数据对比使用了过多的临时map,当并发用户过多的时候,导致GC的处理压力过大,不能及时的释放内存,导致内存持续的升高
解决:通过使用map池,防止频繁的创建map,然后使用玩临时map后defer主动释放,能够及时的释放map
GC触发调整
//GC优化 触发收集的目标百分比定为 5倍于原先体积
debug.SetGCPercent(500)
用户内存释放时间间隔调整
用户下线后的驻留时间过长,导致内存用户数据持续升高,通过调整释放时间间隔找到合理的时间间隔
正则使用导致cpu过高,替换成其他方式
问题:底层字符串的转换使用的正则去转换驼峰,由于底层会经常的这种转换,当用户量上去后,cpu的压力会持续的上涨,导致服务器的cpu扛不住
解决:正则转换字符串替换成了strcase.ToSnake(s) 方式能够极大的节省cpu的使用
检查重复计算比较高的地方
问题:底层的重复字符串转换,重复计算等问题
解决:通过预加载提前转化或者计算结果,然后缓存起来后续只需要读取。通过只计算一次然后结果缓存等方法减少cpu的使用
Gateway服务的CPU过高
问题:pprof分析CPU发现Gateway生成token的方式使用Sha256和bcrypt加密算法
解决:Sha256和bcrypt加密算法计算过于复杂,对于高并发的场景下很吃CPU,优化替换成了SHA-1 + Base64 编码提升百分之500%性能
本作品采用《CC 协议》,转载必须注明作者和本文链接