閱讀233 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Redis開發運維實踐問題處理之一般處理流程

6.1.1 探

測服務是否可用

127.0.0.1:6379> ping 

返回PONG說明正常

6.1.2 探測服務延遲

redis-cli --latency 顯示的單位是milliseconds

,作為參考,千兆網一跳一般延遲為0.16ms左右

6.1.3 監控正在請求執行的命令 在cli下執行monitor,生產環境慎用。


6.1.4 查看統計信息

Mrds:6379> info

在cli下執行info。

info Replication

隻看其中一部分。

config resetstat

重新統計。

# Server
redis_version:2.8.19 ###redis版本號
redis_git_sha1:00000000 ###git SHA1
redis_git_dirty:0 ###git dirty flag
redis_build_id:78796c63e58b72dc
redis_mode:standalone ###redis運行模式
os:Linux 2.6.32-431.el6.x86_64 x86_64 ###os版本號
arch_bits:64 ###64位架構
multiplexing_api:epoll ###調用epoll算法
gcc_version:4.4.7 ###gcc版本號
process_id:25899 ###服務器進程PID
run_id:eae356ac1098c13b68f2b00fd7e1c9f93b1c6a2c ###Redis的隨機標識符(用於sentinel和集群)
tcp_port:6379 ###Redis監聽的端口號
uptime_in_seconds:6419 ###Redis運行時長(s為單位)
uptime_in_days:0 ###Redis運行時長(天為單位)
hz:10
lru_clock:10737922 ###以分鍾為單位的自增時鍾,用於LRU管理
config_file:/etc/redis/redis.conf ###redis配置文件

# Clients
connected_clients:1 ###已連接客戶端的數量(不包括通過從屬服務器連接的客戶端)這個參數也要一定關注,有飆升和明顯下降時都會有問題。即使不操作
client_longest_output_list:0 ###當前連接的客戶端中最長的輸出列表
client_biggest_input_buf:0 ###當前連接的客戶端中最大的。輸出緩存
blocked_clients:0 ###正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數量 需監控

# Memory
used_memory:2281560 ###由 Redis 分配器分配的內存總量,以字節(byte)為單位
used_memory_human:2.18M ###以更友好的格式輸出redis占用的內存
used_memory_rss:2699264 ###從操作係統的角度,返回 Redis 已分配的內存總量(俗稱常駐集大小)。這個值和 top 、 ps 等命令的輸出一致,包含了used_memory和內存碎片。
used_memory_peak:22141272 ### Redis 的內存消耗峰值(以字節為單位)
used_memory_peak_human:21.12M ###以更友好的格式輸出redis峰值內存占用
used_memory_lua:35840 ###LUA引擎所使用的內存大小
mem_fragmentation_ratio:1.18 ### =used_memory_rss /used_memory 這兩個參數都包含保存用戶k-v數據的內存和redis內部不同數據結構需要占用的內存,並且RSS指的是包含操作係統給redis實例分配的內存,這裏麵還包含不連續分配所帶來的開銷。因此在理想情況下, used_memory_rss 的值應該隻比 used_memory 稍微高一點兒。當 rss > used ,且兩者的值相差較大時,表示存在(內部或外部的)內存碎片。內存碎片的比率可以通過 mem_fragmentation_ratio 的值看出。當 used > rss 時,表示 Redis 的部分內存被操作係統換出到交換空間了,在這種情況下,操作可能會產生明顯的延遲。可以說這個值大於1.5或者小於1都是有問題的。當大於1.5的時候需要擇機進行服務器重啟。當小於1的時候需要對redis進行數據清理
mem_allocator:jemalloc-3.6.0

# Persistence
loading:0 ###記錄服務器是否正在載入持久化文件,1為正在加載
rdb_changes_since_last_save:0 ###距離最近一次成功創建持久化文件之後,產生了多少次修改數據集的操作
rdb_bgsave_in_progress:0 ###記錄了服務器是否正在創建 RDB 文件,1為正在進行
rdb_last_save_time:1420023749 ###最近一次成功創建 RDB 文件的 UNIX 時間戳
rdb_last_bgsave_status:ok ###最近一次創建 RDB 文件的結果是成功還是失敗,失敗標識為err,這個時候寫入redis 的操作可能會停止,因為默認stop-writes-on-bgsave-error是開啟的,這個時候如果需要盡快恢複寫操作,可以手工將這個選項設置為no。
rdb_last_bgsave_time_sec:0 ###最近一次創建 RDB 文件耗費的秒數
rdb_current_bgsave_time_sec:-1 ###如果服務器正在創建 RDB 文件,那麼這個域記錄的就是當前的創建操作已經耗費的秒數
aof_enabled:1 ###AOF 是否處於打開狀態,1為啟用
aof_rewrite_in_progress:0 ###服務器是否正在創建 AOF 文件
aof_rewrite_scheduled:0 ###RDB 文件創建完畢之後,是否需要執行預約的 AOF 重寫操作(因為在RDB時aof的rewrite會被阻塞一直到RDB結束)
aof_last_rewrite_time_sec:-1 ###最近一次創建 AOF 文件耗費的時長
aof_current_rewrite_time_sec:-1 ###如果服務器正在創建 AOF 文件,那麼這個域記錄的就是當前的創建操作已經耗費的秒數
aof_last_bgrewrite_status:ok ###最近一次創建 AOF 文件的結果是成功還是失敗
aof_last_write_status:ok 
aof_current_size:176265 ###AOF 文件目前的大小
aof_base_size:176265 ###服務器啟動時或者 AOF 重寫最近一次執行之後,AOF 文件的大小
aof_pending_rewrite:0 ###是否有 AOF 重寫操作在等待 RDB 文件創建完畢之後執行
aof_buffer_length:0 ###AOF 緩衝區的大小
aof_rewrite_buffer_length:0 ###AOF 重寫緩衝區的大小
aof_pending_bio_fsync:0 ###後台 I/O 隊列裏麵,等待執行的 fsync 調用數量
aof_delayed_fsync:0###被延遲的 fsync 調用數量
loading_start_time:1441769386 loading啟動時間戳
loading_total_bytes:1787767808 loading需要加載數據量
loading_loaded_bytes:1587418182 已經加載的數據量
loading_loaded_perc:88.79 加載百分比
loading_eta_seconds:7 剩餘時間

# Stats
total_connections_received:8466 ###服務器已接受的連接請求數量,注意這是個累計值。
total_commands_processed:900668 ###服務器已執行的命令數量,這個數值需要持續監控,如果在一段時間內出現大範圍波動說明係統要麼出現大量請求,要麼出現執行緩慢的操作。
instantaneous_ops_per_sec:1 ###服務器每秒鍾執行的命令數量
total_net_input_bytes:82724170
total_net_output_bytes:39509080
instantaneous_input_kbps:0.07
instantaneous_output_kbps:0.02
rejected_connections:0 ###因為最大客戶端數量限製而被拒絕的連接請求數量
sync_full:2
sync_partial_ok:0
sync_partial_err:0
expired_keys:0 ###因為過期而被自動刪除的數據庫鍵數量
evicted_keys:0 ###因為最大內存容量限製而被驅逐(evict)的鍵數量。這個數值如果不是0則說明maxmemory被觸發,並且 evicted_keys一直大於0,則係統的latency增加,此時可以臨時提高最大內存,但這隻是臨時措施,需要從應用著手分析。
keyspace_hits:0 ###查找數據庫鍵成功的次數。可以計算命中率
keyspace_misses:500000 ###查找數據庫鍵失敗的次數。
pubsub_channels:0 ###目前被訂閱的頻道數量
pubsub_patterns:0 ###目前被訂閱的模式數量
latest_fork_usec:402 ###最近一次 fork() 操作耗費的毫秒數

# Replication
role:master ###如果當前服務器沒有在複製任何其他服務器,那麼這個域的值就是 master ;否則的話,這個域的值就是 slave 。注意,在創建複製鏈的時候,一個從服務器也可能是另一個服務器的主服務器
connected_slaves:2 ###2個slaves
slave0:ip=192.168.65.130,port=6379,state=online,offset=1639,lag=1
slave1:ip=192.168.65.129,port=6379,state=online,offset=1639,lag=0
master_repl_offset:1639
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1638

# CPU
used_cpu_sys:41.87 ###Redis 服務器耗費的係統 CPU
used_cpu_user:17.82 ###Redis 服務器耗費的用戶 CPU
used_cpu_sys_children:0.01 ###後台進程耗費的係統 CPU
used_cpu_user_children:0.01 ###後台進程耗費的用戶 CPU

# Keyspace
db0:keys=3101,expires=0,avg_ttl=0 ###keyspace 部分記錄了數據庫相關的統計信息,

6.1.5 獲取慢查詢


結果為查詢ID、發生時間、運行時長和原命令 默認10毫秒,默認隻保留最後的128條。單線程的模型下,一個請求占掉10毫秒是件大事情,注意設置和顯示的單位為微秒,注意這個時間是不包含網絡延遲的。


獲取慢查詢日誌


獲取慢查詢日誌條數


清空慢查詢


6.1.6 查看客戶端


列出所有連接


殺死某個連接, 例如


獲取連接的名稱 默認nil


設置連接名稱,便於調試

6.1.7 查看日誌

日誌位置在/redis/log下,redis.log為redis主日誌,sentinel.log為sentinel監控日誌。




最後更新:2017-05-08 11:31:08

  上一篇:go Redis開發運維實踐問題處理隻延遲檢查
  下一篇:go Redis開發運維實踐數據遷移之將key從當前數據庫移動到指定數據庫