有监控
1、部署监控工具,统计各种操作的频率;
2、查看慢查询。
没监控,使用命令排查
- 使用info和monitor命令(这两个命令也可以登录之后使用,不过有可能造成client的crash,可以使用tail命令优化)
redis-cli -h 192.168.1.xx -a 'xxx' info
redis-cli -h 192.168.1.xx -a 'xxx' monitor
#info命令会显示当前的状态,monitor会显示当前的客户端的命令请求;
- 使用慢查询
redis-cli -h 192.168.1.xx -a 'xxx' slowlog get (reset替换get清空旧的log)
#这个命令会显示出最近一段时间内的耗时较久的查询。
#慢日志参考
127.0.0.1:6379> slowlog get
1) 1) (integer) 0 //日志唯一标示
2) (integer) 1517305551 // 命令执行的UNIX时间戳
3) (integer) 8248 // 命令执行的时间(微秒)
4) 1) "config" // 执行的命令及参数
2) "set"
3) "slowlog-log-slower-than"
4) "0"
redis日志
#非容器
tailf /var/log/redis/
#容器
docker logs [参数] 容器
-f :实时查看
-t :显示时间戳(相对时间)
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
例子:
查看指定时间后的日志,只显示最后100行:
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
redis连接数异常
#1.查看redis连接数
[root@redis ~]# docker exec -it 22933238fad7 redis-cli info |grep connect
connected_clients:6809
total_connections_received:178835
rejected_connections:0
connected_slaves:0
#2.查看客户端连接状态
[root@redis ~]# redis-cli client list
id=3867 addr=172.18.0.1:33452 fd=1997 name= age=11514 idle=115140(秒) flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=NULL
#3.配置客户端空闲超时时间
查看redis客户端超时设置
redis-cli config get timeout
1) "timeout"
2) "0" #0表示不开启空闲清除
设置空闲清理时间
redis-cli config set timeout 600
redis使用内存异常
#1.查看系统内存
[root@redis ~]$ free -g
total used free shared buffers cached
Mem: 62 61 1 0 0 25
-/+ buffers/cache: 35 27
Swap: 0 0 0
#2.查看redis使用内存
[root@redis ~]# docker exec -it 22933238fad7 redis-cli info |grep memory
used_memory:890846296
used_memory_human:27G #
used_memory_rss:877944832
used_memory_rss_human:837.27M
used_memory_peak:942846680
used_memory_peak_human:899.17M
used_memory_peak_perc:94.48%
#3.限制redis使用内存
立即生效
sysctl vm.overcommit_memory=1
永久生效
vim /etc/sysctl.conf
vm.overcommit_memory=1