发表于: 2019-11-26 23:25:38
1 941
今天完成的事:
1、本地压测。
(1)无缓存、无负载均衡。
50线程
300线程
700线程
2000线程,开始出现异常
5000线程
(2)无缓存、有负载均衡。
50线程
300线程,开始出现异常
700线程
2000线程
5000线程
无缓存的情况下,进行负载均衡测试,可以看出在线程较少的时候,有负载均衡的响应时间比较慢些,当线程大于700时,有负载均衡的响应时间就比较平衡,在2000-5000线程时,甚至是没有负载均衡的响应时间的二分之一。
但是没有负载均衡在线程2000才出现异常,有负载均衡后,线程300就出现异常了。。
(3)有缓存、无负载均衡。
300线程
第一次从数据库查询是比较慢,第二次是从缓存查询,快很多,但是后面好几次就比较混乱,一会快,一会慢。。但是整体都比第一次快,吞吐量也大了很多。
700线程,时快时慢,相差不大,整体都比无缓存快不少,吞吐量也大了很多。
1500线程,只有第一次测试有异常,其余四次没有。
2000线程
5000线程,5次有3次出现异常,且响应时间大多数高于无缓存状态。
(4)有缓存、有负载均衡。
300线程,开始出现异常
与无缓存、有负载相比,响应要快。
与有缓存、无负载相比,响应慢很多。
500线程
与无缓存、有负载相比,响应差不多。
与有缓存、无负载相比,响应慢很多。
700线程
1500线程
与无缓存、有负载相比,响应差不多。
与有缓存、无负载相比,响应差不多。
2000线程
与无缓存、有负载相比,响应慢一些。
与有缓存、无负载相比,响应快一些。
5000线程
与无缓存、有负载相比,响应慢一些。
与有缓存、无负载相比,响应快很多。
对比负载均衡
(1)无缓存时,线程小于700时,有负载均衡的响应时间比较慢些;
当线程大于700时,有负载均衡的响应时间就比较平衡;
在2000-5000线程时,甚至是无负载均衡的响应时间的二分之一。
(2)有缓存时,线程小于1500时,有负载均衡的响应时间比较慢些;
当线程大于1500时,有负载均衡的响应时间比较快。
(3)没有负载均衡在线程2000-3000才出现异常,有负载均衡后,线程300就出现异常了。。
对比缓存
(4)无负载均衡时,线程5000时,有缓存响应时间要慢;
线程小于5000,有缓存响应时间都比无缓存快很多。
(5)有负载均衡时,线程大于2000时,有缓存响应时间要慢;
线程小于2000,有缓存响应时间与无缓存差不多。
总结:
(1)负载均衡在线程小时,浪费资源,响应较慢,线程大时,响应很快。
但是容易出现异常。
(2)缓存在无负载均衡时,线程小时,响应很快,线程大时,响应较慢;
在有负载均衡时,线程小时,响应与无缓存差不多,线程大时,响应较慢。
2、jedis工具类。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtil {
// redis 连接池
private static JedisPool pool = null;
private JedisPool getPool() {
if (pool == null) {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//连接超时时是否阻塞,false时报异常,ture阻塞直到超时, 默认true
jedisPoolConfig.setBlockWhenExhausted(true);
//逐出策略(默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数))
jedisPoolConfig.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
//最大空闲连接数, 默认8个
jedisPoolConfig.setMaxIdle(100);
//最大连接数, 默认8个
jedisPoolConfig.setMaxTotal(210);
//获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted)
// 如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
jedisPoolConfig.setMaxWaitMillis(-1);
//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
jedisPoolConfig.setMinEvictableIdleTimeMillis(500);
//最小空闲连接数, 默认0
jedisPoolConfig.setMinIdle(0);
//每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3
jedisPoolConfig.setNumTestsPerEvictionRun(100);
//对象空闲多久后逐出, 当空闲时间>该值 且 空闲连接>最大空闲数 时直接逐出
// 不再根据MinEvictableIdleTimeMillis判断 (默认逐出策略)
jedisPoolConfig.setSoftMinEvictableIdleTimeMillis(1000);
//对拿到的connection进行validateObject校验, 默认false
jedisPoolConfig.setTestOnBorrow(true);
//在进行returnObject对返回的connection进行validateObject校验
jedisPoolConfig.setTestOnReturn(true);
//定时对线程池中空闲的链接进行validateObject有效性校验, 默认false
jedisPoolConfig.setTestWhileIdle(true);
pool = new JedisPool(jedisPoolConfig, "localhost", 6379);
return pool;
} else {
return pool;
}
}
public void set(String key, String value) {
if (pool == null) {
pool = getPool();
}
Jedis jedis = pool.getResource();
jedis.set(key, value);
jedis.close();
}
public String get(String key) {
if (pool == null) {
pool = getPool();
}
Jedis jedis = pool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}
public boolean exists(String key) {
if (pool == null) {
pool = getPool();
}
Jedis jedis = pool.getResource();
Boolean isExists = jedis.exists(key);
jedis.close();
return isExists;
}
}
controller类优秀学员方法
明天计划的事:
1、服务器安装测试所需服务。
2、了解任务六要求,整理测试过的信息。
3、服务器压测,对比。
遇到的问题:
1、测试的结果感觉有问题,有缓存应该在任何情况下响应都会很快,但是根据有无负载均衡、线程大小会出现不同现象。是因为负载均衡容易出现异常,线程大小会影响响应吗?
2、响应时间表、TPS表不太会看。
收获:
今天主要是压测,对比有无缓存,有无负载均衡。
评论