RedisのDEBUG系コマンド

Redis には DEBUG系コマンドが用意されている。

どういうわけか、ドキュメントにはその一部の OBJECT と SEGFAULT しか載っていないので、ソースコード(debug.c::debugCommand)を参考にまとめてみた。

DEBUG OBJECT key
http://redis.io/commands/debug-object

DEBUG OBJECT is a debugging command that should not be used by clients. Check the OBJECT command instead.

redis 127.0.0.1:6379[1]> lpush mylist a
(integer) 1
redis 127.0.0.1:6379[1]> debug object mylist
Value at:0x7f10c02e9470 refcount:1 encoding:ziplist serializedlength:15 lru:1122833 lru_seconds_idle:10

redis 127.0.0.1:6379[1]> set key val
OK
redis 127.0.0.1:6379[1]> debug object key
Value at:0x7f10c02e94a0 refcount:1 encoding:raw serializedlength:4 lru:1122840 lru_seconds_idle:0

DEBUG POPULATE number
テストデータを投入する場合に利用。
“key:{N}” : “val:{N}” という String 型データを指定した数だけ追加してくれる。
LIST や SET など他の型は追加できない。

redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> debug populate 10000
OK
redis 127.0.0.1:6379> dbsize
(integer) 10000
redis 127.0.0.1:6379> get key:0
"value:0"
redis 127.0.0.1:6379> get key:9999
"value:9999"
redis 127.0.0.1:6379> get key:10000
(nil)

DEBUG DIGEST
全データベースのハッシュ値を計算。
キーが多いとそれなりに時間とCPUリソースを消費し、その間ブロックするので注意が必要。
マスタ<-> スレーブの同期チェックにも利用できる

redis 127.0.0.1:6379> debug digest
ce5fa32eaf7d2733ec09b3abf74f796f92299e37

DEBUG RELOAD

rdb(スナップショットファイル) のダンプ、リストアテストに利用。
SAVE & FLUSHALL & rdb.dmp のロードを行う。

redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> debug populate 100
OK
redis 127.0.0.1:6379> dbsize
(integer) 100
redis 127.0.0.1:6379> debug digest
6ccb30af923e3936581da32cffcd103966a1fd3a
redis 127.0.0.1:6379> debug reload
OK
redis 127.0.0.1:6379> dbsize
(integer) 100
redis 127.0.0.1:6379> debug digest
6ccb30af923e3936581da32cffcd103966a1fd3a

DEBUG LOADAOF
AOF ファイル(WAL ファイルのようなもの)のリストアテストに利用。
FLUSHALL & appendonly.aof のロードを行う。(AOF ファイルが存在することを前提にしている)

redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> debug populate 100
OK
redis 127.0.0.1:6379> dbsize
(integer) 100
redis 127.0.0.1:6379> bgrewriteof
Background append only file rewriting started
redis 127.0.0.1:6379> debug digest
6ccb30af923e3936581da32cffcd103966a1fd3a
redis 127.0.0.1:6379> debug loadaof
OK

DEBUG SEGFAULT
http://redis.io/commands/debug-segfault

DEBUG SEGFAULT performs an invalid memory access that crashes Redis. It is used to simulate bugs during the development.

サーバログに SEGV 発生時のメモリダンプが出力される。

[31720] 24 Mar 22:18:25 #

=== REDIS BUG REPORT START: Cut & paste starting from here ===
[31720] 24 Mar 22:18:25 # Redis 2.5.1 crashed by signal: 11
[31720] 24 Mar 22:18:25 # Failed assertion: <no assertion failed> (<no file>:0)
[31720] 24 Mar 22:18:25 # --- STACK TRACE
[31720] 24 Mar 22:18:25 # ./redis-server(debugCommand+0x160) [0x439900]
[31720] 24 Mar 22:18:25 # ./redis-server(debugCommand+0x160) [0x439900]
...

DEBUG ASSERT
assert が失敗する状況を意図的に発生させる。

[31842] 24 Mar 22:24:27 # --- CLIENT LIST OUTPUT
[31842] 24 Mar 22:24:27 # addr=127.0.0.1:46310 fd=5 idle=0 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 omem=0 events=r cmd=debug
[31842] 24 Mar 22:24:27 # --- CURRENT CLIENT INFO
[31842] 24 Mar 22:24:27 # client: addr=127.0.0.1:46310 fd=5 idle=0 flags=N db=0
sub=0 psub=0 qbuf=0 obl=0 oll=0 omem=0 events=r cmd=debug
[31842] 24 Mar 22:24:27 # argv[0]: 'debug'
[31842] 24 Mar 22:24:27 # argv[1]: 'assert'
[31842] 24 Mar 22:24:27 # --- REGISTERS
[31842] 24 Mar 22:24:27 #
RAX:0000000000000000 RBX:00000000000000df
RCX:000000000046dcfc RDX:0000000000000000
...

DEBUG SLEEP seconds

指定秒数だけ SLEEP する。
一定期間コマンドをブロックする状況を再現させるときに利用?

redis 127.0.0.1:6379> debug sleep 5
OK
(5.00s)
Advertisements
Tagged with: ,
Posted in database

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
%d bloggers like this: