系統:centos6.7
配置:4c8g
應用:redis cluster,例項化
1、無法啟動redis,啟動後系統oom,直接殺死
2、redis: oom command not allowed when used memory > 『maxmemory』
記憶體已滿,不允許資料在寫入
注: used_memory_human表示已用記憶體
used_memory_rss表示系統給redis分配的記憶體(即常駐記憶體)
mem_fragmentation_ratio=used_memory_rss/used_memory比例,一般情況下,used_memory_rss略高於used_memory,當記憶體碎片較多時,則mem_fragmentation_ratio會較大,可以反映記憶體碎片是否很多
1、首先檢視redis的記憶體使用,如上圖。可以看到已用記憶體5g多,常駐記憶體3.8g多。而我們的機器記憶體只有8g可用。明顯記憶體已經充爆。接下來想到的就應該是key的量太大了還是value的量太大了。
2、找出redis中的key。
3、分析發現key中有650000的common:order:logcachekey這樣的key,接下來我們需要確認下這些key的大小###檢視key的個數(最好是把key拿出來分析)
keys
*echo
"keys *"|/usr/
local
/redis
/bin
/redis
-cli -p
6381
>
/tmp/
6381.log
4、分析發現common:order:logcachekey所占用的記憶體為3g左右。因此找到元凶為這個key所導致的。###檢視key大小的命令
debug
object
echo
'debug object "common:order:logcachekey90bef863-dfc7-4739-8404-9b6624a70196"'
|/usr/
local
/redis
/bin
/redis
-cli -p
6381
5、清理key
for
i in
`grep common:order:log 6381.log`;do
echo
"del $i"
|/usr/
local
/redis
/bin
/redis
-cli -p
6381
;done
6、key已經找到刪除,現在要查詢是哪個應用產生的。
因為開發人員沒在,那從運維角度,我是從網路流量來分析的,使用iftop
根據流量大小,找到對應的主機,聯絡到開發人員確認。
如果key少的話,可以直接取出每個key對應的value的大小,按照從大到小的順序排序
fori
in`cat /tmp/6379.log`;do
echo -n
"$i "
;echo
"debug object $i"
|/usr/
local
/redis
/bin
/redis
-cli -p
6379
|awk -f
'[ |:]+''';
done
|sort -r
-n -k2
1、問題發生後,用最快最簡單的方式先把問題解決。減少影響的時間。比如公升級擴大記憶體。
2、此次遇到的問題是在測試環境,如果確認redis中資料可以清除,可以使用暴力的方式直接清空本地的例項化檔案,將記憶體釋放出來。但是生產環境切不可進行此操作。
CygWin安裝RedisCluster指南
安裝前確認磁碟有6g以上的磁碟容量,安裝時雙擊setup x86 64.exe,基本按照預設設定安裝就行,也可自己指定安裝路徑等,3 deps hiredis net.c中注釋掉 並在 include sds.h 之後追加 ifdef cygwin define tcp keepcnt 8 defi...
RedisCluster搭建步驟
安裝redis 配置並啟動redis節點 選兩台機器執行該步驟 把redis安裝目錄redis.conf修改如下並複製進對應的700 資料夾 bind 10.11.147.40 redis安裝機器ip 注意這裡千萬不要用127.0.0.1或者注釋掉這行,以上兩種都會導致遠端機器連線不到redis p...
redisCluster環境準備
需要 redis3.0以上的版本 我使用了redis3.2.12 之後需要ruby環境 yum install ruby yum install rubygems 安裝redis trib.rb執行依賴的ruby的包redis 3.2.2.gem 位址為 gem install redis 3.2....