20191227 Redis監控和性能指標

1、Redis性能指標;

2、Redis配置文件;

 

通過Redis-cli命令行界面訪問到Redis服務器,然後使用info命令獲取所有與Redis服務相關的信息

比較重要的2部分性能指標memory和stats

可以指定info命令的參數來獲取單個分類下的數據。比如輸入info memory命令,會只返回與內存相關的數據。

1、內存使用率used_memory

used_memory是Redis使用的內存總量,它包含了實際緩存佔用的內存和Redis自身運行所佔用的內存(如元數據、lua)。

used_memory 字段數據表示的是:由Redis分配器分配的內存總量,以字節(byte)爲單位。

used_memory_human上的數據和used_memory是一樣的值,它以M爲單位顯示,僅爲了方便閱讀。

 

2、命令處理數total_commands_processed

在info信息裏的total_commands_processed字段顯示了Redis服務處理命令的總數,其命令都是從一個或多個Redis客戶端請求過來的。

 

3、內存碎片率mem_fragmentation_ratio

info信息中的mem_fragmentation_ratio給出了內存碎片率的數據指標,它是由操系統分配的內存除以Redis分配的內存得出。

跟蹤內存碎片率對理解Redis實例的資源性能是非常重要的。內存碎片率稍大於1是合理的,這個值表示內存碎片率比較低,也說明redis沒有發生內存交換。但如果內存碎片率超過1.5,那就說明Redis消耗了實際需要物理內存的150%,其中50%是內存碎片率。若是內存碎片率低於1的話,說明Redis內存分配超出了物理內存,操作系統正在進行內存交換。

 

4、回收key數量

info信息中的evicted_keys/ɪˈvɪktɪd/字段顯示的是,因爲maxmemory限制導致key被回收刪除的數量。

回收key的情況只會發生在設置maxmemory值後,不設置會發生內存交換。 當Redis由於內存壓力需要回收一個key時,Redis首先考慮的不是回收最舊的數據,而是在最近最少使用的key或即將過期的key中隨機選擇一個key,從數據集中刪除。

 

軟件包管理器。

基於RPM包管理,能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

yum install redis (是否安裝過此軟件?) Package redis-5.0.7-1.el7.remi.x86_64 already installed and latest version

如果找不到命令,說明對應的軟件沒有安裝,去安裝軟件即可。

 

 

在linux上啓動redis-stat:./redis-stat

redis是否開啓了AOF,0表示未開啓,1表示開啓;

配置文件一般在etc目錄下,比如redis.conf,mysql.conf;

按 ESC :wq 保存並退出

在哪個目錄下執行安裝命令,當前軟件就安裝到那裏。

 

service redis start # 啓動redis;

service redis stop # 停止redis;

service redis status # 查看redis運行狀態;

ps -ef | grep redis # 查看redis進程;

redis-cli # 進入本機redis;

keys * # 列出所有key;

ps aux | grep redis 這個命令對我幫助很大

# 將redis-cli拷貝到/usr/local/bin/下,讓redis-cli指令可以在任意目錄下直接使用;

sudo cp src/redis-cli /usr/local/bin/;

 

 

Redis性能監控之Redis-Stat

Redis-Stat是一個比較有名的redis指標可視化的監控工具,採用ruby開發,基於redis的info命令來統計,不影響redis性能。

鼠標放上去會顯示完整的列名。

監聽某個指定實例還是監聽所有實例

redis性能監控工具;用 redis-stat 進行redis的性能數據收集;

Redis-Stat數據展示工具:控制檯使用,web頁面使用;

如何配置在web頁面上展示(比較方便)? 對外映射端口即可。

linux上如何啓動redis-stat? ./redis-stat

當前進程沒有綁定到網卡上。

直接映射端口出去:瀏覽器能夠訪問;http://192.168.140.88:7006/

窗口關閉後臺啓動:使用nohup處理;

./redis-stat 192.168.140.88:6379 --server=7006 1 --daemon

./redis-stat 127.0.0.1:6379 --server=7006 1 --daemon

當前進程是否綁定到了網卡之上。

nohup ./redis-stat 127.0.0.1:6379 --server=7006 1 &

每隔1秒打印一次信息

service redis status

Linux netstat命令用於顯示網絡狀態。利用netstat指令可讓你得知整個Linux系統的網絡情況。

netstat -tnpl

三大核心指標:每秒執行命令數,cpu使用率,內存使用率;

 

time: 更新參數時間

US: Redis 服務器使用的用戶 CPU

SY: Redis 服務器使用的系統 CPU

CL: connected_clients:客戶端連接數(不包括從站的連接數)

cmd/s: total_commands_processed_per_ses 服務器已每秒執行的命令數量

exp/s: expired_keys_per_second 因爲過期而每秒被自動刪除的數據庫鍵數量

11evt/s: evicted_keys_per_second 因爲最大內存容量限制而每秒被驅逐(evict)的鍵數量

hit%/s: keyspace_hits_ratio _per_second 查找數據庫鍵成功的次數比例

hit/s: keyspace_hits  _per_second  查找數據庫鍵成功的次數

mis/s: keyspace_misses _per_second 查找數據庫鍵每秒失敗的次數

aofcs: aof_current_size  AOF文件目前的大小

redis-cli 直接敲這個命令即可。

 

1慢日誌:

1.1、通過命令[slowlog get]得到 Redis 執行的 slowlog 集合,理想情況下slowlog 集合應該爲空即沒有任何慢日誌。

1.2、若發現有慢命令,則應該逐個分析是否正常,是否需要優化。

   

2存活情況:是最重要的健康指標,通過命令 PING 的響應是否爲 PONG 來判斷。

 

3連接數:connected_clients    

3.1、連接的客戶端數量,radis-stat 監控工具或命令 [redis-cli info Clients|grep connected_clients] 得到,這個值與使用Redis服務的連接池配置關係比較大,這個值如果很大,需要排查問題原因。

3.2、另外還有一個拒絕連接數(rejected_connections)也需要關注,這個值理想狀態是0 。如果大於0,說明創建的連接數大於 maxclients,需要排查原因。是 Redis 連接池配合不合理還是連接這個Redis 的服務過多。

 

4 阻塞客戶端數量:blocked_clients 

4.1 blocked_clients 通常是執行了 list 數據類型的 BLPOP 或者 BRPOP 命令引起的,可以通過[redis-cli info Clients|grep blocked_clients]得到,這個值最應該=0。

 

5 使用內存峯值

5.1 監控 Redis 內存使用峯值,可以通過命令[config set maxmemory]設置允許使用的最大內存。

5.2 爲了防止發生swap導致Redis性能驟減,甚至由於使用內存超標導致系統kill,建議used_memory_peak(佔用內存的峯值)的值與maxmemory 的值有個安全區間,例如1G。

5.3 可用radis-stat查看used_memory圖像化曲線找到佔用內存的峯值。

 

6 內存碎片率:used_memory_rss/use_memory 這兩個值可用radis-stat監控

6.1 mem_fragmentation_ratio = used_memory_rss/use_memory 當值大於1時,表示分配的內存超過實際使用的內存,數值越大[利用率不高],碎片率越嚴重。當這個值小於1時,表示發生了 swap(Swap分區在系統的物理內存不夠用的時候,把物理內存中的一部分空間釋放出來,以供當前運行的程序使用) ,既可用內存不足。

6.2 Redis4.0 有一個主要的特性就是優化內存碎片率問題(Memory de-fragmentation)。在redis.conf 配置文件中[ACTIVE DEFRAGMENTATION:碎片整理允許Redis壓縮內存空間,從而回收內存。此特性默認是關閉的,可以通過命令CONFIG SET activedefrag yes 熱啓動這個特性]。

6.3 當內存使用量(use_memory)很小的時候,這個值參考價值不大。所以建議used_memory至少1G以上才考慮對內存碎片率進行監控。

 

7緩存命中率:keyspace_misses + keyspace_hits  

7.1 keyspace_misses/keyspace_hits 這兩個指標用來統計緩存的命中率,keyspace_misses值未命中次數,keyspace_hits 表示命中次數。keyspace_hits/(keyspace_misses+keyspace_hits) 就是緩存命中率。

7.2 如果緩存命中率過低,那麼要排查對緩存的用法是否有問題。

 

8 OPS:instantaneous_pos_per_sec 表示緩存的OPS(operation per second 每秒操作次數)

 

9 持久化:

9.1 rdb_last_bgsave_status/aof_last_bgrewrite_status,即最近一次或者最後一次 RDB/AOF 持久化是否有問題,這兩個值都應該時 “OK”。

由於 Redis 持久化時會 fork 子進程,且 fork 是一個完全阻塞的過程,所以可以監控 fork    耗時即:latest_fork_usec,單位是微妙,如果這個值比較大會影響業務,甚至出現 timeout 。

9.2失效KEY:如果把 Redis 當緩存使用,那麼建議所有的key都設置expire屬性,通過命令redis-cli info Keyspace 得到每個 db 中 key 的數量和設置了 expire屬性的 key 的屬性,且 expires(表示設置了超時時間的key個數) 需要 等於 keys。

 

Redis對用戶信息怎麼處理的,登錄成功後如何保存本地信息,Redis緩存哪些信息?

Redis計數器:Redis Incr命令將key中儲存的數字值增一。如果key不存在,那麼key的值會先被初始化爲0,然後再執行INCR操作。一般通常用來當做計數器來用。

Redis的單點安裝,以及開始兩種持久化操作;

Redis如何部署集羣,設置各個節點之間的關係,如何建立主從模式?

使用redis做限流功能?

Redis的性能監控工具以及Redis的性能,最新版redis客戶端只能看到粗略的情況?

 

如何封裝本地緩存框架?

Cache類似於Map,它是存儲鍵值對的集合。

//設置cache的初始大小爲10,要合理設置該值

//設置併發數爲5,即同一時間最多只能有5個線程往cache執行寫入操作

內存使用率是Redis服務最關鍵的一部分。如果一個Redis實例的內存使用率超過可用最大內存 (used_memory >可用最大內存)

如果存儲的是對象,需要把對象轉化成String存儲,所以使用了序列化工具。

getIfPresent(String key)

通過key獲取緩存中的value,若不存在直接返回null。

 

Redis 一定會牽涉到序列化與反序列化的問題。

如何讀取配置文件CacheConfig

創建一個統一的操作redis Client的工具類

Redis中涉及的異常處理?當前框架哪些操作redis不支持?

如何設置緩存的定時刷新?Cache

Redis 連接池的常用配置以及使用,關閉連接資源

Redis Cluster客戶端命令

 

參考:

https://www.cnblogs.com/shamo89/p/8384921.html

https://www.cnblogs.com/gossip/p/5993922.html

 

發佈了303 篇原創文章 · 獲贊 104 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章