-
问题现象
网关重启一段时间后,会内存会一点一点一直叠加 -
解决方式
这个 NacosFactory.createConfigService() 是会创建一个ConfigService对象的,这段代码相当于每隔几秒钟就创建了一个对象,这个对象gc比较难回收,所以就产生内存爆了,内存爆了cpu也跟着爆了。将创建ConfigService切换为单例模式
-
代码解决
/**
* 创建ConfigService
*
* @return
*/
private ConfigService createConfigService() {
try {
//判断实例是否null
if (configService == null) {
//对单例类进行加锁
synchronized (DynamicRouteLoader.class) {
//在判断是否为null
if (configService == null) {
Properties properties = new Properties();
properties.setProperty("serverAddr", gatewayRoutersConfig.getServerAddr());
if(org.apache.commons.lang3.StringUtils.isNotBlank(gatewayRoutersConfig.getNamespace())){
properties.setProperty("namespace", gatewayRoutersConfig.getNamespace());
}
if(org.apache.commons.lang3.StringUtils.isNotBlank( gatewayRoutersConfig.getUsername())){
properties.setProperty("username", gatewayRoutersConfig.getUsername());
}
if(org.apache.commons.lang3.StringUtils.isNotBlank(gatewayRoutersConfig.getPassword())){
properties.setProperty("password", gatewayRoutersConfig.getPassword());
}
//创建实例
configService = NacosFactory.createConfigService(properties);
log.info("==========创建configService实例===============");
}
}
}
//返回实例
return configService;
} catch (Exception e) {
log.error("创建ConfigService异常", e);
return null;
}
}
代码中gatewayRoutersConfig是获取nacos文件类似@Value(“”)