zoukankan      html  css  js  c++  java
  • 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服务器性能 
    [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

    2、redis-cli

    redis-cli -h localhost -p 6380 monitor 
    Dump all the received requests in real time; 
    监控host为localhost,端口为6380,redis的连接及读写操作 
    [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"
    redis-cli -h localhost -p 6380 info 
    Provide information and statistics about the server ; 
    提供host为localhost,端口为6380,redis服务的统计信息 
     
    [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

    3、redis-stat

    redis-stat host localhost port 6380 overview
    Print general information about a Redis instance;
    实时打印出host为localhost,端口为6380,redis实例的总体信息

    [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   

    redis-stat host localhost port 6380 overview
    Measure Redis server latency;
    输出host为localhost,端口为6380,redis服务中每个请求的响应时长

    [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

    二、 Redis监控

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

    # 客户端和服务器连接正常,返回PONG
    redis> PING
    PONG
     
    # 客户端和服务器连接不正常(网络不正常或服务器未能正常运行),返回连接异常
    redis 127.0.0.1:6379> PING
    Could not connect to Redis at 127.0.0.1:6379: Connection refused

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

    redis-cli info

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

    先解释下各个参数含义

    # 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 的数量

    内存使用

    如果 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

  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/yeahwell/p/5330012.html
Copyright © 2011-2022 走看看