java对redis性能监控编码_Redis状态与性能监控

Redis介绍

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表、哈希、集合和有序集合5种。支持在服务器端计算集合的并、交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)

1、redis-benchmark

redis基准信息,redis服务器性能检测

redis-benchmark -h localhost -p 6379 -c 100 -n 100000

100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能

48304ba5e6f9fe08f3fa1abda7d326ab.png

[root@Architect redis-1.2.6]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000

====== PING ======

10001 requests completed in 0.41 seconds

50 parallel clients

3 bytes payload

keep alive: 1

0.01% <= 0 milliseconds

23.09% <= 1 milliseconds

85.82% <= 2 milliseconds

95.60% <= 3 milliseconds

97.20% <= 4 milliseconds

97.96% <= 5 milliseconds

98.83% <= 6 milliseconds

99.41% <= 7 milliseconds

99.70% <= 8 milliseconds

99.99% <= 9 milliseconds

100.00% <= 12 milliseconds

24274.27 requests per second

48304ba5e6f9fe08f3fa1abda7d326ab.png

2、redis-cli

redis-cli -h localhost -p 6380 monitor

Dump all the received requests in real time;

监控host为localhost,端口为6380,redis的连接及读写操作

48304ba5e6f9fe08f3fa1abda7d326ab.png

[root@Architect redis-1.2.6]# redis-cli -h localhost -p 6380 monitor

+OK

+1289800615.808225 "monitor"

+1289800615.839079 "GET" "name"

+1289800615.853694 "PING"

+1289800615.853783 "PING"

+1289800615.854646 "PING"

+1289800615.854974 "PING"

+1289800615.857693 "PING"

+1289800615.866862 "PING"

+1289800615.871944 "PING"

48304ba5e6f9fe08f3fa1abda7d326ab.png

redis-cli -h localhost -p 6380 info

Provide information and statistics about the server ;

提供host为localhost,端口为6380,redis服务的统计信息

48304ba5e6f9fe08f3fa1abda7d326ab.png

[root@Architect redis-1.2.6]# redis-cli -h localhost -p 6380 info

redis_version:2.0.4

redis_git_sha1:00000000

redis_git_dirty:0

arch_bits:32

multiplexing_api:epoll

process_id:21990

uptime_in_seconds:490580

uptime_in_days:5

connected_clients:103

connected_slaves:0

blocked_clients:0

used_memory:4453240

used_memory_human:4.25M

changes_since_last_save:200

bgsave_in_progress:0

last_save_time:1290394640

bgrewriteaof_in_progress:0

total_connections_received:809

total_commands_processed:44094018

expired_keys:0

hash_max_zipmap_entries:64

hash_max_zipmap_value:512

pubsub_channels:0

pubsub_patterns:0

vm_enabled:0

role:slave

master_host:localhost

master_port:6379

master_link_status:up

master_last_io_seconds_ago:18

db0:keys=1319,expires=0

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、redis-stat

redis-stat host localhost port 6380 overview

Print general information about a Redis instance;

实时打印出host为localhost,端口为6380,redis实例的总体信息

48304ba5e6f9fe08f3fa1abda7d326ab.png

[root@Architect redis-1.2.6]# redis-stat port 6380 overview

------- data ------ ------------ load ----------------------------- - childs -

keys used-mem clients requests connections

1319 5.37M 103 44108021 (+44108021) 810

1319 5.38M 103 44108124 (+103) 810

1319 5.38M 103 44108225 (+101) 810

1319 5.39M 103 44108326 (+101) 810

1319 5.40M 103 44108427 (+101) 810

1319 5.41M 103 44108528 (+101) 810

48304ba5e6f9fe08f3fa1abda7d326ab.png

redis-stat host localhost port 6380 overview

Measure Redis server latency;

输出host为localhost,端口为6380,redis服务中每个请求的响应时长

48304ba5e6f9fe08f3fa1abda7d326ab.png

[root@Architect redis-1.2.6]# redis-stat port 6380 latency

1: 0.16 ms

2: 0.11 ms

3: 0.15 ms

4: 0.11 ms

5: 0.18 ms

6: 0.14 ms

48304ba5e6f9fe08f3fa1abda7d326ab.png

二、 Redis监控

首先判断客户端和服务器连接是否正常

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 客户端和服务器连接正常,返回PONG

redis> PING

PONG

# 客户端和服务器连接不正常(网络不正常或服务器未能正常运行),返回连接异常

redis 127.0.0.1:6379> PING

Could not connect to Redis at 127.0.0.1:6379: Connection refused

48304ba5e6f9fe08f3fa1abda7d326ab.png

Redis 监控最直接的方法就是使用系统提供的 info 命令,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。

redis-cli info

结果会返回 Server、Clients、Memory、Persistence、Stats、Replication、CPU、Keyspace 8个部分。从info大返回结果中提取相关信息,就可以达到有效监控的目的。

先解释下各个参数含义

48304ba5e6f9fe08f3fa1abda7d326ab.png

# Server

redis_version:2.8.8                     # Redis 的版本

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:bf5d1747be5380f

redis_mode:standalone

os:Linux 2.6.32-220.7.1.el6.x86_64 x86_64

arch_bits:64

multiplexing_api:epoll

gcc_version:4.4.7                       #gcc版本

process_id:49324                        # 当前 Redis 服务器进程id

run_id:bbd7b17efcf108fdde285d8987e50392f6a38f48

tcp_port:6379

uptime_in_seconds:1739082               # 运行时间(秒)

uptime_in_days:20                       # 运行时间(天)

hz:10

lru_clock:1734729

config_file:/home/s/apps/RedisMulti_video_so/conf/zzz.conf

# Clients

connected_clients:1                     #连接的客户端数量

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

# Memory

used_memory:821848                       #Redis分配的内存总量

used_memory_human:802.59K

used_memory_rss:85532672                 #Redis分配的内存总量(包括内存碎片)

used_memory_peak:178987632

used_memory_peak_human:170.70M           #Redis所用内存的高峰值

used_memory_lua:33792

mem_fragmentation_ratio:104.07           #内存碎片比率

mem_allocator:tcmalloc-2.0

# Persistence

loading:0

rdb_changes_since_last_save:0            #上次保存数据库之后,执行命令的次数

rdb_bgsave_in_progress:0                 #后台进行中的 save 操作的数量

rdb_last_save_time:1410848505            #最后一次成功保存的时间点,以 UNIX 时间戳格式显示

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

aof_enabled:0                            #redis是否开启了aof

aof_rewrite_in_progress:0

aof_rewrite_scheduled:0

aof_last_rewrite_time_sec:-1

aof_current_rewrite_time_sec:-1

aof_last_bgrewrite_status:ok

aof_last_write_status:ok

# Stats

total_connections_received:5705          #运行以来连接过的客户端的总数量

total_commands_processed:204013          # 运行以来执行过的命令的总数量

instantaneous_ops_per_sec:0

rejected_connections:0

sync_full:0

sync_partial_ok:0

sync_partial_err:0

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

evicted_keys:0                           #运行以来删除过的key的数量

keyspace_hits:2129                       #命中key 的次数

keyspace_misses:3148                     #没命中key 的次数

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

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

latest_fork_usec:4391

# Replication

role:master                              #当前实例的角色master还是slave

connected_slaves:0

master_repl_offset:0

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:0

repl_backlog_histlen:0

# CPU

used_cpu_sys:1551.61

used_cpu_user:1083.37

used_cpu_sys_children:2.52

used_cpu_user_children:16.79

# Keyspace

db0:keys=3,expires=0,avg_ttl=0             #各个数据库的 key 的数量,以及带有生存期的 key 的数量

48304ba5e6f9fe08f3fa1abda7d326ab.png

内存使用

如果 Redis 使用的内存超出了可用的物理内存大小,那么 Redis 很可能系统会被杀掉。针对这一点,你可以通过 info 命令对 used_memory 和 used_memory_peak 进行监控,为使用内存量设定阀值,并设定相应的报警机制。当然,报警只是手段,重要的是你得预先计划好,当内存使用量过大后,你应该做些什么,是清除一些没用的冷数据,还是把 Redis 迁移到更强大的机器上去。

持久化

如果因为你的机器或 Redis 本身的问题导致 Redis 崩溃了,那么你唯一的救命稻草可能就是 dump 出来的rdb文件了,所以,对 Redis dump 文件进行监控也是很重要的。可以通过对rdb_last_save_time 进行监控,了解最近一次 dump 数据操作的时间,还可以通过对rdb_changes_since_last_save进行监控来获得如果这时候出现故障,会丢失(即已改变)多少数据。

Keys

通过获取Keyspace中的结果得到各个数据库中key的数量

QPS

即每分钟执行的命令个数,即:(total_commands_processed2-total_commands_processed1)/span,为了实时得到QPS,可以设定脚本在后台运行,记录过去几分钟的total_commands_processed。在计算QPS时,利用过去的信息和当前的信息得出QPS的估计值。

三、 showlog功能

Redis 有一个实用的slowlog功能,正如你可以猜到的,可以让你检查运行缓慢的查询。

Slowlog 将会记录运行时间超过Y微秒的最后X条查询. X 和 Y 可以在 redis.conf 或者在运行时通过 CONFIG 命令:

CONFIG SET slowlog-log-slower-than 5000

CONFIG SET slowlog-max-len 25

slowlog-log-slower-than 是用来设置微秒数的, 因此上面的设置将记录执行时间超过5秒的查询. 要获取记录的日志,你可以使用 SLOWLOG GET X 命令, 这里 X 是你想要获取的记录条数:

SLOWLOG GET 10

四、Redis中统计各种数据大小的方法

Redis 内存比较大的话,我们就不太容易查出是哪些(种)键占用的空间。

有一些工具能够提供必要的帮助,比如 redis-rdb-tools 可以直接分析 RDB 文件来生成报告

五、超强、超详细Redis数据库入门教程

http://www.jb51.net/article/56448.htm

http://www.yiibai.com/redis/

六、 Redis操作命令总结

http://www.jb51.net/article/61793.htm

七、Redis存储策略和最大内存

在redis中,允许用户设置最大使用内存大小maxmemory(需要配合maxmemory-policy使用),设置为0表示不限制;当redis内存数据集快到达maxmemory时,redis会实行数据淘汰策略。Redis提供6种数据淘汰策略:

volatile-lru:从已设置过期时间的内存数据集中挑选最近最少使用的数据 淘汰;

volatile-ttl: 从已设置过期时间的内存数据集中挑选即将过期的数据 淘汰;

volatile-random:从已设置过期时间的内存数据集中任意挑选数据 淘汰;

allkeys-lru:从内存数据集中挑选最近最少使用的数据 淘汰;

allkeys-random:从数据集中任意挑选数据 淘汰;

no-enviction(驱逐):禁止驱逐数据。(默认淘汰策略。当redis内存数据达到maxmemory,在该策略下,直接返回OOM错误);

关于maxmemory设置,通过在redis.conf中maxmemory参数设置,或者通过命令CONFIG SET动态修改

关于数据淘汰策略的设置,通过在redis.conf中的maxmemory-policy参数设置,或者通过命令CONFIG SET动态修改

如127.0.0.1:6379>CONFIG GET maxmemory

1) “maxmemory"

2) “0”

127.0.0.1:6379>CONFIG SET maxmemory 100MB

OK

127.0.0.1:6379>CONFIG GET maxmemory

“maxmemory"

“104857600”

注意,在64bit系统下,maxmemory设置为0表示不限制Redis内存使用,在32bit系统下,maxmemory不能超过3GB;

应用:

如mysql里有2000w条数据,redis只存20w条热点数据,如何保证redis中的数据都是热点数据?

这就能设置最大内存,再设置淘汰策略,设置volatile-lru,allkeys-lru等都可以;

设置Redis最大占用内存

Redis设置最大占用内存,打开redis配置文件,找到如下段落,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。修改如下所示:

# In short... if you have slaves attached it is suggested that you set a lower

# limit for maxmemory so that there is some free RAM on the system for slave

# output buffers (but this is not needed if the policy is 'noeviction').

#

# maxmemory

maxmemory 268435456

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值