memcached起動オプションで、-vvvをつけると標準エラー出力にログが表示される。
(-vvvオプションの詳細は、こことか詳しい。)
デバッグ目的で、起動中memcachedプロセスのログレベルをコマンドで変更したかったのだけど、動的にログレベルを変更するコマンドが見当たらない。
コマンドで用意されてなけりゃ、GDBで。
ということで、GDBでmemcachedプロセスにアタッチしてログ出力モード用の変数を無理やり変更したらできました(笑)
以下、手順を書いときます。
memcachedを-vつけずに起動(デバッグログ非表示モード)
kanbe@kanbe-laptop% ./memcached -p 11211 -r -B auto -C -m 10 -M -f 1.25 -I 1000000 -t 24 -c 256 -R 20
この状態で、telnetから適当にsetする。
memcachedプロセスの標準エラー出力には何も表示されない。
GDBでアタッチ
デバッグレベル用変数は、settings.verbose
verbose levelを最強にしてみる。(memcached起動オプションの-vvvと同じ)
(gdb) whatis settings
type = struct settings
(gdb) ptype settings
type = struct settings {
size_t maxbytes;
int maxconns;
int port;
int udpport;
char *inter;
int verbose;
rel_time_t oldest_live;
int evict_to_free;
char *socketpath;
int access;
double factor;
int chunk_size;
int num_threads;
char prefix_delimiter;
int detail_enabled;
int reqs_per_event;
_Bool use_cas;
enum protocol binding_protocol;
int backlog;
int item_size_max;
_Bool sasl;
}
(gdb) p settings.verbose
$3 = 0
(gdb) set write on
(gdb) set settings.verbose = 3
(gdb) p settings.verbose
$4 = 3
(gdb) c
Continuing.
この状態でもう一回telnetからsetする
set ddddddddddddddddd 0 0 1
a
STORED
memcachedの標準エラー出力に以下が表示される
159: going from conn_read to conn_parse_cmd
<159 set ddddddddddddddddd 0 0 1 159: going from conn_parse_cmd to conn_nread > NOT FOUND ddddddddddddddddd
>159 STORED
159: going from conn_nread to conn_write
159: going from conn_write to conn_new_cmd
159: going from conn_new_cmd to conn_waiting
159: going from conn_waiting to conn_read
動いてるmemcachedプロセスのログレベルを変更できた!
No comments:
Post a Comment