有監控
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