redis运维基础

一、 常见故障分析

1. 内存过高分析

  • info 命令查看key总数是否大量增加,占用内存是否大量增加
  • redis-cli -h host -p port client list | grep -v "omem=0",查询输出缓冲区不为0的客户端连接,omem字段为占用的内存量(B),cmd字段为命令,从client_longest_output_list看是否输出缓冲区占用内存较大,也就是有大量的数据从Redis服务器向某些客户端输出。参考 https://carlosfu.iteye.com/blog/2254571

2. CPU高分析

client list中后面有命令,具体的话就要看monitor(monitor消耗cpu也高,不能执行太久)。client list就是看执行那一时间点的,monitor就全些。

redis-cli -a xxx monitor > redis.txt

看都执行了什么命令(看cmd=部分),有没有消耗CPU的一些异常命令。一般引起CPU高都是一下子取很多值的,从之前的异常排查来看,还是getall,keys *这类的命令最消耗CPU

新建连接和每秒的操作数量增加也会CPU增加。

 

3. 压测时主要关注项

  • 慢日志:slowlog get
  • ops数:info stats,查看 instantaneous_ops_per_sec 指标。一般可以支撑每秒6到8K,如果只有几百几十,说明操作很少,那一般就不是redis的问题

二、 常用命令

1. 启停命令

Linux启动
$redis-server $REDIS_DATA/conf/redis.conf

Windows启动
$redis-server –-console

Windows && Linux停止
$redis-cli –p port –a passwd shutdown save

生产环境关闭方法

redis-cli
#执行
bgrewriteaof
shutdown save

检查redis进程脚本,未启动则自动启动

#! /bin/bash

#redis port 6380
ProcName=*:6380
ProcNumber=`ps -ef |grep -w $ProcName|grep -v grep|wc -l`
if [ $ProcNumber -le 0 ];then
   echo "Redis 6380 is not running" >> auto_start_redis.log
   redis-server /u01/redis/rd6380/conf/redis.conf
else
   echo "Redis 6380 is running" >> auto_start_redis.log
fi

2. 实例管理

检查连接情况
client list

库中KEY的数量
info keyspace

检查主从同步状态,看master_link_status,slave_repl_offset与master_repl_offset
info replication

DB中键的数量
dbsize

切换数据库(redis用数字作为多个数据库的实现,默认16个,编号为0-15)
select db号

清除所有数据库(高危)
flushall

清除当前数据库(高危)
flushdb

3. 慢查询

两个参数

  • slowlog-log-slower-than 10000   慢查询捕获阈值(默认10000微秒)                     
  • slowlog-max-len 128                   慢日志最多存储条数(默认128,超过后先进先出)

获取慢日志

  • slowlog get [n]   n指定条数

慢日志格式

  • 慢查询日志标识id
  • 发生时间戳
  • 命令耗时(微秒)
  • 执行命令
  • 命令参数

获取慢日志列表长度

  • slowlog len

慢日志重置

  • slowlog reset


4. 配置管理

支持两种修改配置方法:

  • 改配置文件
  • config set 动态修改,并将配置持久化到本地文件
-- 参数设置
config set slowlog-max-len 1000
-- 将配置持久化到本地文件
config rewrite

获取配置信息

  • CONFIG GET CONFIG_SETTING_NAME

获取所有配置

  • CONFIG GET *

5. 备份

  • RDB备份命令:bgsave
  • AOF备份命令:bgrewriteaof

6. 客户端相关

列出连接到redis服务端的客户端信息                

  • client list(执行较慢,连接数较多时频繁执行可能阻塞redis)
  • info clients(执行较快,不能精确定位到所有客户端,只能显示输入缓冲区最大值)

设置客户端名

  • client setName xx
  • client getName

杀掉指定IP地址和端口的客户端

  • client kill 127.0.0.1:52343
  • client kill ip:port

元素过大问题

list元素数量不大的情况下,lrang就算全量读也不会有问题。如果list中元素本身太大,会导致:

  • 严重的内存消耗,就算删除list中的元素也会造成内存碎片;
  • 网卡带宽可能被大量占用,造成读写性能问题,如果机器上还有其它应用的话,也会受影响;
  • redis本身不适合存储大key,平常最佳实践中单个key大小最大不超过2M,要不性能就会有问题。

猜你喜欢

转载自blog.csdn.net/Hehuyi_In/article/details/106672155