SpringCloud服务启动后,接口第一次请求很慢 |
您所在的位置:网站首页 › ipad第一次开机为什么这么慢 › SpringCloud服务启动后,接口第一次请求很慢 |
SpringCloud服务启动后,接口第一次请求很慢的优化历程
症状概述
服务启动后,请求任意接口,都很慢,响应时长达到2秒 而再次进行请求,响应很快,响应时长毫秒级。 初步诊断很可能耗时资源在第一次接收到请求时才进行初始化 确定病因
还有个网上找到的Ribbon优化,默认client是懒加载,第一次请求才会进行初始化,所以这里也会影响,需要进行优化 对症下药 DataSourceDataSourceConfig配置类中修改:应用启动时,进行初始化 @org.springframework.context.annotation.Bean(name = "dataSource",initMethod = "init",destroyMethod = "close") public DruidDataSource dataSource() throws SQLException { DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(this.driverClassName); ds.setUrl(this.url); ds.setUsername(this.username); ds.setPassword(this.password); ds.setInitialSize(this.initialSize.intValue()); ds.setMinIdle(this.minIdle.intValue()); ds.setMaxActive(this.maxActive.intValue()); ds.setMaxWait(this.maxWait.longValue()); ds.setTimeBetweenEvictionRunsMillis(this.timeBetweenEvictionRunsMillis.longValue()); ds.setMinEvictableIdleTimeMillis(this.minEvictableIdleTimeMillis.longValue()); ds.setValidationQuery(this.validationQuery); ds.setTestWhileIdle(this.testWhileIdle.booleanValue()); ds.setTestOnBorrow(this.testOnBorrow.booleanValue()); ds.setTestOnReturn(this.testOnReturn.booleanValue()); ds.setFilters(this.filters); ds.init(); return ds; } DispatcherServlet当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet 在配置文件上添加: spring.mvc.servlet.load-on-startup=100 初始化Redis像我这里使用的是codis,封装了一个工具类,第一次调用时会初始化 所以Redis工具类初始化方法上加 @PostConstruct 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行 RibbonRibbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,而是在调用的时候才会去创建相应的Client 所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间 饥饿加载 ribbon.eager-load.enabled=true ribbon.eager-load.clients=member-api,activity-api |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |