2019-05-31
目的为满足客户要求的测试报告,进行实际场景的压力测试
测试流程 eureka、zuul、后台服务集群3台
测试工具 JMeter
1. 并发 100
zuul报错
解决1. 从路由配置开始查起,试了hytrix、tomcat等配置之后,依然不行
解决2. 添加日志开始捕获异常
发现redis在运行中报 Could not get a resource from the pool 直观上感觉是配置问题
开始优化配置如下,最后问题得到解决
@Configuration @EnableCaching public class RedisCacheConfiguration extends CachingConfigurerSupport { private static Logger logger = LoggerFactory.getLogger(RedisCacheConfiguration.class); @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.jedis.pool.max-idle}") private int maxIdle; @Value("${spring.redis.jedis.pool.max-total}") private int maxTotal; @Value("${spring.redis.password}") private String password; @Bean public JedisPool redisPoolFactory() { logger.info("JedisPool注入成功 redis地址:" + host + ":" + port); JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); //最大空闲连接数, 应用自己评估,不要超过ApsaraDB for Redis每个实例最大的连接数 jedisPoolConfig.setMaxIdle(maxIdle); //最大连接数, 应用自己评估,不要超过ApsaraDB for Redis每个实例最大的连接数 jedisPoolConfig.setMaxTotal(maxTotal); jedisPoolConfig.setTestOnBorrow(true); jedisPoolConfig.setTestOnReturn(true); /* 性能测试优化新增redis配置*/ jedisPoolConfig.setMinIdle(20);//设置最小空闲数 jedisPoolConfig.setMaxWaitMillis(10000); //Idle时进行连接扫描 jedisPoolConfig.setTestWhileIdle(true); //表示idle object evitor两次扫描之间要sleep的毫秒数 jedisPoolConfig.setTimeBetweenEvictionRunsMillis(30000); //表示idle object evitor每次扫描的最多的对象数 jedisPoolConfig.setNumTestsPerEvictionRun(10); //表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义 jedisPoolConfig.setMinEvictableIdleTimeMillis(60000); JedisPool pool = new JedisPool(jedisPoolConfig, host, port, timeout, password); return pool; } }
解决3. tps始终停留在100左右,换台网络带宽比较大的机器(1M改为10M)
JMeter并发100,tps能达到1000
最后附一张基础架构图,准备从目前的微服务自动化迁移到k8s