问题
生产环境发现spring cloud gateway服务cpu使用过高,接近100%
使用top命令查询占用CPU较高的线程,发现4个线程CPU异常
spring cloud gateway 基于Netty 实现,默认情况创建一个线程监听端口,accept连接,多个线程(数量等于CPU核心数)处理socket数据,因此怀疑是做路由 转发的四个线程出现问题
使用 jstack 查看java线程栈信息,发现了对应线程确实是做路由转发的线程(jstack中线程是16进制展示的)
排查log4j日志,发现大量日志输出,日志级别为debug,怀疑是请求处理线程输出大量日志导致CPU占用过高
处理方式
调整日志级别到info,重新部署服务,CPU 恢复正常
结论
1、大量日志会影响服务性能,高并发场景,谨慎处理日志级别
2、网关是后台所有请求的入口,基于单一职责原则,只做代理,不要添加认证等业务相关的服务,以防系统出现瓶颈
来源:oschina
链接:https://my.oschina.net/canghaidekongjian/blog/3288464