redis info详解

 Pala   2018-10-12 16:09   26 人阅读  0 条评论

redis版本为:4.0.9



# Server(服务器信息)

redis_version:4.0.9                             #redis服务器版本

redis_git_sha1:00000000                  #Git SHA1

redis_git_dirty:0                                    #Git dirty flag

redis_build_id:6c2c390b97607ff0    #redis build id

redis_mode:cluster                              #运行模式,单机或者集群

os:Linux 2.6.32-358.2.1.el6.x86_64 x86_64 #redis服务器的宿主操作系统

arch_bits:64                                         #架构(32或64位)

multiplexing_api:epoll                        #redis所使用的事件处理机制

gcc_version:4.4.7                                #编译redis时所使用的gcc版本

process_id:12099                               #redis服务器进程的pid

run_id:63bcd0e57adb695ff0bf873cf42d403ddbac1565  #redis服务器的随机标识符(用于sentinel和集群)

tcp_port:9021                                #redis服务器监听端口

uptime_in_seconds:26157730   #redis服务器启动总时间,单位是秒

uptime_in_days:302                    #redis服务器启动总时间,单位是天

hz:10                                #redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。

lru_clock:14359959      #自增的时钟,用于LRU管理,该时钟100ms(hz=10,因此每1000ms/10=100ms执行一次定时任务)更新一次。

config_file:/redis_cluster/etc/9021.conf  #配置文件路径

executable:/var/lib/redis/redis-server


# Clients(已连接客户端信息)

connected_clients:1081       #已连接客户端的数量(不包括通过slave连接的客户端)

client_longest_output_list:0 #当前连接的客户端当中,最长的输出列表,用client list命令观察omem字段最大值

client_biggest_input_buf:0   #当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值

blocked_clients:0                   #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量


# Memory(内存信息)

used_memory:4065723376                 #由redis分配器已分配的内存总量,以字节为单位

used_memory_human:3.79G       #以人类可读的格式返回redis已分配的内存总量

used_memory_rss:4674179072         #从操作系统的角度,返回redis已分配的内存总量(俗称常驻集大小)。这个值和top命令的输出一致

used_memory_rss_human:4.35G

used_memory_peak:4465559384    #redis的内存消耗最大值(以字节为单位) 。它的值由serverCron()函数定期更新,每次判断used_memory当前值是否大于used_memory_peak,如果大于就将它的值更新为used_memory值,代码见这里

used_memory_peak_human:4.16G #以人类可读的格式返回redis的内存消耗峰值

used_memory_lua:37888                  #lua脚本引擎所使用的内存大小(以字节为单位)  ,通过lua_gc()获取,代码见这里

used_memory_lua_human:37.00K

used_memory_peak_perc:91.05%

used_memory_overhead:285412646

used_memory_startup:786448

used_memory_dataset:3780310730

used_memory_dataset_perc:93.00%

total_system_memory:135081304064    # 表示系统总内存大小,获取方式见这里

total_system_memory_human:125.80G


maxmemory:0

maxmemory_human:0B

maxmemory_policy:noeviction

mem_fragmentation_ratio:1.15    #

存碎片率,它的值为 used_memory_rss/used_memory,计算方法见这里。如果此值接近1表示服务器内存碎片很少,大于1.5表示内存碎片率较大,举个例子解释:如果Redis进程malloc了1024K内存,操作系统如果为它分配了256个物理页(页面大小为4K),刚好为1024K,那说明内存分配非常紧凑,可是如果超过256太多,甚至达到了500,在计算RSS的时候,500*4K = 2000K,此时的mem_fragmentation_ratio = 2000/1024=2左右,说明内存碎片率较高。

mem_allocator:jemalloc-4.0.3     #在编译时指定的redis所使用的内存分配器。可以是libc、jemalloc或者tcmalloc

active_defrag_running:0

lazyfree_pending_objects:0


# Persistence(rdb和aof的持久化相关信息)

loading:0                                                    #服务器是否正在载入持久化文件

rdb_changes_since_last_save:28900855 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化

rdb_bgsave_in_progress:0                  #服务器是否正在创建rdb文件

rdb_last_save_time:1482358115        #离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件

rdb_last_bgsave_status:ok                   #最近一次rdb持久化是否成功

rdb_last_bgsave_time_sec:2                #最近一次成功生成rdb文件耗时秒数

rdb_current_bgsave_time_sec:-1        #如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数

aof_enabled:1                                          #是否开启了aof

aof_rewrite_in_progress:0                     #标识aof的rewrite操作是否在进行中

aof_rewrite_scheduled:0              

#rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite 

aof_last_rewrite_time_sec:-1            #最近一次aof rewrite耗费的时长

aof_current_rewrite_time_sec:-1      #如果rewrite操作正在进行,则记录所使用的时间,单位秒

aof_last_bgrewrite_status:ok             #上次bgrewriteaof操作的状态

aof_last_write_status:ok                     #上次aof写入状态

aof_current_size:4201740                 #aof当前尺寸

aof_base_size:4201687                    #服务器启动时或者aof重写最近一次执行之后aof文件的大小

aof_pending_rewrite:0                       #是否有aof重写操作在等待rdb文件创建完毕之后执行?

aof_buffer_length:0                             #aof buffer的大小

aof_rewrite_buffer_length:0              #aof rewrite buffer的大小

aof_pending_bio_fsync:0                  #后台I/O队列里面,等待执行的fsync调用数量

aof_delayed_fsync:0                          #被延迟的fsync调用数量


# Stats(一般统计信息)

total_connections_received:209561105 #新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置

total_commands_processed:2220123478  #redis处理的命令数

instantaneous_ops_per_sec:279                  #redis当前的qps,redis内部较实时的每秒执行的命令数

total_net_input_bytes:118515678789          #redis网络入口流量字节数

total_net_output_bytes:236361651271       #redis网络出口流量字节数

instantaneous_input_kbps:13.56                  #redis网络入口kps

instantaneous_output_kbps:31.33               #redis网络出口kps

rejected_connections:0                                   #拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数

sync_full:1                                                          #主从完全同步成功次数

sync_partial_ok:0                                             #主从部分同步成功次数

sync_partial_err:0                                            #主从部分同步失败次数

expired_keys:15598177                                #运行以来过期的key的数量

evicted_keys:0                                                 #运行以来剔除(超过了maxmemory后)的key的数量

keyspace_hits:1122202228                          #命中次数

keyspace_misses:577781396                     #没命中次数

pubsub_channels:0                                       #当前使用中的频道数量

pubsub_patterns:0                                         #当前使用的模式的数量

latest_fork_usec:15679                                 #最近一次fork操作阻塞redis进程的耗时数,单位微秒

migrate_cached_sockets:0                          #


# Replication(主从信息,master上显示的信息)

role:master                               #实例的角色,是master or slave

connected_slaves:1              #连接的slave实例个数

slave0:ip=192.168.64.104,port=9021,state=online,offset=6713173004,lag=0 #lag从库多少秒未向主库发送REPLCONF命令

master_repl_offset:6713173145  #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟

repl_backlog_active:1                   #复制积压缓冲区是否开启

repl_backlog_size:134217728    #复制积压缓冲大小

repl_backlog_first_byte_offset:6578955418  #复制缓冲区里偏移量的大小

repl_backlog_histlen:134217728   #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小


# Replication(主从信息,slave上显示的信息)

role:slave                                        #实例的角色,是master or slave

master_host:192.168.64.102       #此节点对应的master的ip

master_port:9021                          #此节点对应的master的port

master_link_status:up                   #slave端可查看它与master之间同步状态,当复制断开后表示down

master_last_io_seconds_ago:0  #主库多少秒未发送数据到从库?

master_sync_in_progress:0        #从服务器是否在与主服务器进行同步

slave_repl_offset:6713173818   #slave复制偏移量

slave_priority:100                          #slave优先级

slave_read_only:1                         #从库是否设置只读

connected_slaves:0                      #连接的slave实例个数

master_repl_offset:0         

repl_backlog_active:0                  #复制积压缓冲区是否开启

repl_backlog_size:134217728   #复制积压缓冲大小

repl_backlog_first_byte_offset:0 #复制缓冲区里偏移量的大小

repl_backlog_histlen:0           #此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小


# CPU(CPU计算量统计信息)

used_cpu_sys:3.52            #Redis服务器消耗的系统CPU

used_cpu_user:35.96           #Redis服务器使用的用户CPU

used_cpu_sys_children:1.82     #后台进程占用的系统CPU

used_cpu_user_children:31.28  #后台进程占用的用户CPU

什么是System CPU?什么是User CPU ? 

CPU通常来说有三种状态:

Idle, 空闲,什么也不做.

Running a user space program,运行在用户态,例如shell或者chrome浏览器等用户态程序。

Running the kernel, 运行在内核态,管理中断或者资源,执行系统调用,例如用户态程序malloc内存,fork子进程等.

通过top命令可以查看到CPU的信息:

top - 17:06:20 up  1:46,  6 users,  load average: 0.12, 0.05, 0.01
Tasks: 290 total,   1 running, 289 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.0 sy,  0.0 ni, 98.9 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  13191533+total, 23158688 used, 10875664+free,    66336 buffers
KiB Swap: 13409484+total,        0 used, 13409484+free.  6119428 cached Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                   
3105 chenxin+  20   0   25072   3140   2528 R   0.3  0.0   0:00.03 top

关注的主要信息就是这三种us 用户态,sy 内核态,id 空闲,这三个值加起来接近100

其他字段信息解释见:http://blog.scoutapp.com/articles/2015/02/24/understanding-linuxs-cpu-stats

Redis INFO CPU 信息来源 

实际上是通过调用 getrusage 这个系统调用完成的。

 NAME
     getrusage -- get information about resource utilization
     int getrusage(int who, struct rusage *r_usage);
DESCRIPTION
     getrusage() returns information describing the resources utilized by the current process, or all its terminated child processes.

可以统计一个进程占用的CPU信息,第二个参数是统计信息的结构体,将信息保存至结构体返回。

因此INFO CPU命令输出的信息表示的是:从Redis启动到此刻,CPU所分别花费在系统和用户态的时间累积,因此只要Redis进程不退出,这个数值是不断变大的,源码见这里

# Commandstats(各种不同类型的命令的执行统计信息)

cmdstat_get:calls=1664657469,usec=8266063320,usec_per_call=4.97  


#call每个命令执行次数,usec总共消耗的CPU时长(单位微秒),平均每次消耗的CPU时长(单位微秒)


# Cluster(集群相关信息)

cluster_enabled:1   #实例是否启用集群模式


# Keyspace(数据库相关的统计信息)

db0:keys=194690,expires=191702,avg_ttl=3607772262  #db0的key的数量,以及带有生存期的key的数,平均存活时间

--------------------- 


参考:

Redis INFO 命令详解

本文地址:http://chenxm.cc/post/736.html
版权声明:本文为原创文章,版权归 Pala 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?