Настройка макс. Холостых соединений с Redis в Spring Boot - PullRequest
0 голосов
/ 11 июня 2018

У меня есть приложение REST API Simple Spring Boot 1.5.x с Redis Caching.Я не добавил никаких пользовательских конфигураторов, и Spring boot автоматически настраивается с помощью Jedis.Свойства Redis следующие:

spring.cache.type = redis
spring.redis.host = localhost
spring.redis.port = 6379
spring.redis.pool.max-active = 10000
spring.redis.pool.max-idle = 9000
spring.redis.pool.min-idle = 9000

Класс приложения Spring Boot

@SpringBootApplication 
@EnableCaching 
public class DemoApplication {
  public static void main(String[] args) {
    pringApplication.run(DemoApplication.class, args);  
  } 
}

Использование

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/api/users/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    @Cacheable(value = "UserDto", key = "#id")
    public UserDto getUser(@PathVariable("id") Integer id){
        User u = userService.getUser(id);
        UserDto dto = new UserDto(u.getId(), u.getFirstName(), u.getLastName());
        return dto;
    }
}

Если я загружаю конечную точку API с помощью JMeter и отслеживаю числопостоянных соединений с Redis с помощью netstat. Я вижу следующий вывод:

Команда Netstat:

while [ true ] ; do  sudo netstat -anp | grep EST|grep "127.0.0.1:6379          ESTABLISHED"|wc -l; done

Вывод

9000
9000
9006
9016
9031
9019
9000
9015
9005
9027
9046
9011
9005
9013
9011
9054
9010
9094
9061
9091
9036
9010
9004
9003
8935
8826
8387
7910
7122
6631
6524
6420
6300
6190
5776
5482
5475
5293
5187
5118
5081
5020
4992
4817
3996
3485
3582
6504
8964
9031
9136
9000
9025
9035
9000
9000

Как вы можете ясно видетьчисло соединений уменьшается в середине, а затем снова увеличивается до 9000, что не кажется желательным результатом.

Кроме того, я вижу следующие журналы отладки.

2018-06-11 14:20:18.010 DEBUG 4151 --- [io-8080-exec-44] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.012 DEBUG 4151 --- [io-8080-exec-19] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-19] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-34] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-34] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-41] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-41] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.015 DEBUG 4151 --- [io-8080-exec-49] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-49] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-29] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-29] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.016 DEBUG 4151 --- [nio-8080-exec-3] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [nio-8080-exec-3] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-51] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.016 DEBUG 4151 --- [io-8080-exec-51] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection
2018-06-11 14:20:18.017 DEBUG 4151 --- [io-8080-exec-45] o.s.d.redis.core.RedisConnectionUtils    : Closing Redis Connection
2018-06-11 14:20:18.017 DEBUG 4151 --- [io-8080-exec-45] o.s.d.redis.core.RedisConnectionUtils    : Opening RedisConnection

На основе кода в GitHub это происходит из-за постоянного вызова методов doGetConnection и releaseConnection.

  1. Желательно ли это?Если да, то как объяснить, что число соединений меньше 9000?

  2. Если это не так, что я могу попробовать?

...