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,255);'># 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的数,平均存活时间
---------------------
参考: