springcloud线上发布超时系列文章:

springcloud线上发布超时之feign(ribbon饥饿加载)

springcloud线上发布超时之grpc

springcloud线上发布超时方案之终极杀招:预热(测试用例)

前言

经过上面两章的优化,超时报错有所减少,但是只是得到了缓解但是当流量切换时还是会有大量超时。

方案

这里又增加了一个启动后预热,即在程序启动后执行测试用例n次,让hystrix、web容器线程池等资源初始化。在测试用例执行完成之前,为了保证服务不对外提供服务,这里可以分两种。

延迟注册到注册中心

如果时使用注册中心来进行服务发现等,这里可以采用延迟注册来保证测试用例的成功执行,
如果时eureka为注册中心可以配置initial-instance-info-replication-interval-seconds参数,默认是40s,可以将其改为1分钟

如果是consul或者zk,可以修改响应的延时注册时间,或者修改服务端有效时间

kubernetes中增加服务ready延时时间

这里再deploy.yml中配置如下:

spec:
replicas: 1
template:
spec:
containers:
- args:
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60 //延迟时间s

案例

这里测试用例不建议使用spring的 @PostConstruct注解,最好是等web容器启动就绪后再执行测试用例,这里给一个我的demo

@Slf4j
public class WebContextInit { private RestTemplate restTemplate = new RestTemplate();
private static WebContextInit webContextInit = new WebContextInit();
private WebContextInit(){}
public static WebContextInit getInstance() {
return webContextInit;
} public void init() {
if (isTestEnabled()) {
for(int i=0;i<10;i++){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String url = "http://localhost:8080/srch-recommend-plt/re-sort";
log.warn("WebContextInit.testResort start");
String body = "xxxbody";
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
HttpEntity<string> entity = new HttpEntity&lt;&gt;(body, headers);
for (int i = 0; i &lt; appConfig.getTestCount(); i++) {
try {
restTemplate.postForObject(url, entity, String.class);
} catch (Exception e) {
log.error("WebContextInit.testDemo error" + e.getMessage());
}
}
log.warn("WebContextInit.testDemo end");
}
});
thread.start();
}
} }

然后在启动类中初始化:

public class DemoApplication {

    public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
WebContextInit.getInstance().init();
} }

</string>

springcloud线上发布超时方案之终极杀招:预热(测试用例)的更多相关文章

  1. Arthas - Java 线上问题定位处理的终极利器

    前言 在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升.负载突高.内存溢出等问题,你需要查命令,查网络,然后 jps.jstack.jmap.jhat.jstat.hprof ...

  2. kafka线上滚动升级方案记录

    kafka升级方案 为什么进行kafka升级 一.修改unclean.leader.election.enabled默认值Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现u ...

  3. 今天,你遇到redis线上连接超时了吗?

    一封报警邮件,大量服务节点 redis 响应超时. 又来,好烦. redis 响应变慢,查看日志,发现大量 TimeoutException. 大量TimeoutException,说明当前redis ...

  4. Jenkins集成Docker实现镜像构建和线上发布

    原文地址:http://www.cnblogs.com/keithtt/p/6410229.html 大概过程如下图: 由于需要用到docker打包镜像,jenkins宿主机上需要安装docker,原 ...

  5. 在windows环境下部署nuxt项目(线上发布部署)

    因为公司项目需要兼容SEO,同时我们也一直希望能够真正的实现前后端分离,于是毫不犹豫的选择了nuxt. 话说要重构前后端分离真是一个大工程,由于各种原因我们团队花了近两年时间都没有完成,最近才又重启把 ...

  6. 线上 CPU100% 排查方案

    问题:生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢? 下面给出两种系统下的排查步骤,都是一模一样的,只是命令稍有区别! 查消耗cpu最高的进程PID 根据 ...

  7. TFS线上生成环境发布历程

    继前文 TFS在项目中Devops落地进程(上) TFS在项目中DevOps落地进程(下) 自从之前将开发环境使用TFS进行了自动化之后,就享受在此成果中,其他后续进度就停顿了好一段时间. 毕竟在我们 ...

  8. Java线上问题排查神器Arthas快速上手与原理浅谈

    前言 当你兴冲冲地开始运行自己的Java项目时,你是否遇到过如下问题: 程序在稳定运行了,可是实现的功能点了没反应. 为了修复Bug而上线的新版本,上线后发现Bug依然在,却想不通哪里有问题? 想到可 ...

  9. 线上SpringCloud网关调用微服务跨机房了,咋整?

    1.前言 公司内考虑到服务器资源成本的问题,目前业务上还在进行服务的容器化改造和迁移,计划将容器化后的服务,以及一些中间件(MQ.DB.ES.Redis等)尽量都迁移到其他机房. 那你们为什么不用阿里 ...

  10. Springcloud及Git线上配置详解

    SpringCloud 这个阶段该如何学? 三层架构 + MVC 框架: Spring IOC AOP SpringBoot,新一代的JavaEE开发标准,自动装配 模块化~ all in one,代 ...

随机推荐

  1. injectionIII iOS代码注入工具(上)

    injectionIII iOS代码注入工具(上) 前言 如果之前用过injection的朋友一定会对其热重载的特性印象深刻,如今injection经过多次更新,现在以injectionIII之名上架 ...

  2. notonlysuccess大神的线段树完全版

    在大神的网站进不去的时候可以过来看看,另外道客巴巴有个排版比较好的文档,外观派可以去看看http://www.doc88.com/p-2728103209174.html 很早前写的那篇线段树专辑至今 ...

  3. linux挂载的ntfs格式硬盘无法使用回收站

    linux挂载的ntfs格式硬盘无法使用回收站 解决办法: 新建回收站文件, 文件名为Trash-XXX . 比如Trash-1000 这里的1000就是你的$UID. sudo mkdir /.Tr ...

  4. Android/SELinux 添加 AVC 权限

    Android/SELinux 添加 AVC 权限 背景 在Android应用层中编写c/c++应用时,发现接口调用出现问题,logcat才知道是因为:权限不够. type=1400 audit(0. ...

  5. STM32 CubeMX 学习:003-定时器

    背景 上一讲 STM32 CubeMX 学习:外部中断的使用 介绍了如何配置以及操作GPIO外部中断. 这一讲我们介绍定时器的有关概念,并对其中一种进行示范. HOST-OS : Windows-10 ...

  6. 基于GNU ARM Eclipse的集成环境搭建

    背景 老师送给我的STM32的板子不小心给我坏了,现在疫情还没过去,为了复习巩固stm32有关的移植,只能先玩玩仿真了. 我们在这一讲主要以搭建环境为主. host平台 :Ubuntu 16.04 G ...

  7. NXP i.MX 6ULL工业开发板硬件说明书( ARM Cortex-A7,主频792MHz)

    前  言 本文档主要介绍TLIMX6U-EVM评估板硬件接口资源以及设计注意事项等内容. 创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理 ...

  8. 移动web布局方法

    继续更新移动端的一个布局,这也是经典中的经典,当初只知道个rem和vwvh适配,其实这里面还有很多的门道不只是一个适配这么简单 一.前置 1.背景缩放 我们都知道做移动端,给的图都是二倍图,你拿来用直 ...

  9. Oracle 锁表查询和解锁方法

    system登录 查询被锁表信息 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, ...

  10. Error: Dynamic require of "path" is not supported

    failed to load config from D:\BaiduSyncdisk\vue3\sys-manager\vite.config.jserror when starting dev s ...