Bootstrap

解决gateway内存一直叠加最终导致OOM

  1. 问题现象
    网关重启一段时间后,会内存会一点一点一直叠加

  2. 解决方式
    这个 NacosFactory.createConfigService() 是会创建一个ConfigService对象的,这段代码相当于每隔几秒钟就创建了一个对象,这个对象gc比较难回收,所以就产生内存爆了,内存爆了cpu也跟着爆了。

    将创建ConfigService切换为单例模式

  3. 代码解决

/**
     * 创建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(“”)

;