REDIS를 운영하다 보면 max number of clients reached 에러가 발생할 때 가 있는데 이는 maxclients가 3만인데 connected_clients가 299970이 되면서 다른 session들이 연결을 요청하게 될 때 발생하게 된다.
원인
maxclients : Redis 인스턴스에 접속 할 수 있는 클라이언트 수를 지정합니다. -1은 최댓값 (4294967295)이 설정되며, 설정하지 않으면 기본 값으로 1024를 갖습니다.
O/S의 ulimit 값과도 연관이 있기 때문에 ulimit 제한도 같이 확인해서 변경해줘야 합니다. (/etc/limits.conf ,/etc/security/limits.conf )
Redis 확인
1. maxclients 확인
redis-cli -p 6379 config get maxclients
2. 현재 connection 확인
redis-cli -p 6379 info clients
3. maxclients 변경
config set maxclients 30000
4. OS 값도 확인
ulimit -n
IP별 Connection List 확인
어느 IP에서 많이 붙고 있는지 확인이 필요함
> redis-cli -p 6379 client list | awk -F ' ' '{print $2}' | awk -F ':' '{print $1}' > redis.txt
> sort redis.txt | uniq -c
435 addr=192.###.###.###
414 addr=192.###.###.###
449 addr=192.###.###.###
435 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
441 addr=192.###.###.###
402 addr=192.###.###.###
420 addr=192.###.###.###
411 addr=192.###.###.###
443 addr=192.###.###.###
427 addr=192.###.###.###
400 addr=192.###.###.###
446 addr=192.###.###.###
442 addr=192.###.###.###
502 addr=192.###.###.###
433 addr=192.###.###.###
405 addr=192.###.###.###
429 addr=192.###.###.###
417 addr=192.###.###.###
425 addr=192.###.###.###
423 addr=192.###.###.###
419 addr=192.###.###.###
487 addr=192.###.###.###
422 addr=192.###.###.###
400 addr=192.###.###.###
407 addr=192.###.###.###
411 addr=192.###.###.###
401 addr=192.###.###.###
400 addr=192.###.###.###
100 addr=192.###.###.###
401 addr=192.###.###.###
100 addr=192.###.###.###
400 addr=192.###.###.###
404 addr=192.###.###.###
407 addr=192.###.###.###
455 addr=192.###.###.###
440 addr=192.###.###.###
401 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
400 addr=192.###.###.###
410 addr=192.###.###.###
434 addr=192.###.###.###
405 addr=192.###.###.###
461 addr=192.###.###.###
402 addr=192.###.###.###
471 addr=192.###.###.###
405 addr=192.###.###.###
400 addr=192.###.###.###
410 addr=192.###.###.###
419 addr=192.###.###.###
425 addr=192.###.###.###
400 addr=192.###.###.###
405 addr=192.###.###.###
414 addr=192.###.###.###
419 addr=192.###.###.###
400 addr=192.###.###.###
443 addr=192.###.###.###
538 addr=192.###.###.###
400 addr=192.###.###.###
420 addr=192.###.###.###
400 addr=192.###.###.###
456 addr=192.###.###.###
1 addr=192.###.###.###
1 addr=127.0.0.1
해결 방안
1. Maxclients 파라미터 변경
redis-cli -p 6379 config set maxclients 40000
2. 불필요한 Connection 확인 및 KILL
127.0.0.1:6379> client list
addr=192.168.100.1:23755 fd=7 name=No1 ~ cmd=client
addr=192.168.100.2:23756 fd=8 name=No2 ~ cmd=client
addr=192.168.100.2:23757 fd=9 name=No3 ~ cmd=client
addr=192.168.100.4:23759 fd=10 name=No5 ~ cmd=client 2
127.0.0.1:6379> client kill 192.168.100.4:23759
OK