memcahced perl管理工具 memcached-tool
发布时间:2020-12-15 23:55:02 所属栏目:大数据 来源:网络整理
导读:#!/usr/bin/perl##?memcached-tool:#???stats/management?tool?for?memcached.##?Author:#???Brad?Fitzpatrick?brad@danga.com##?Contributor:#???Andrey?Niakhaichyk?andrey@niakhaichyk.org##?License:#???public?domain.??I?give?up?all?rights?to?this#?
#!/usr/bin/perl # #?memcached-tool: #???stats/management?tool?for?memcached. # #?Author: #???Brad?Fitzpatrick?<brad@danga.com> # #?Contributor: #???Andrey?Niakhaichyk?<andrey@niakhaichyk.org> # #?License: #???public?domain.??I?give?up?all?rights?to?this #???tool.??modify?and?copy?at?will. # use?strict; use?IO::Socket::INET; my?$addr?=?shift; my?$mode?=?shift?||?"display"; my?($from,?$to); if?($mode?eq?"display")?{ ????undef?$mode?if?@ARGV; }?elsif?($mode?eq?"move")?{ ????$from?=?shift; ????$to?=?shift; ????undef?$mode?if?$from?<?6?||?$from?>?17; ????undef?$mode?if?$to???<?6?||?$to???>?17; ????print?STDERR?"ERROR:?parameters?out?of?rangenn"?unless?$mode; }?elsif?($mode?eq?'dump')?{ ????; }?elsif?($mode?eq?'stats')?{ ????; }?elsif?($mode?eq?'settings')?{ ????; }?elsif?($mode?eq?'sizes')?{ ????; }?else?{ ????undef?$mode; } undef?$mode?if?@ARGV; die ????"Usage:?memcached-tool?<host[:port]?|?/path/to/socket>?[mode]n ???????memcached-tool?10.0.0.5:11211?display????#?shows?slabs ???????memcached-tool?10.0.0.5:11211????????????#?same.??(default?is?display) ???????memcached-tool?10.0.0.5:11211?stats??????#?shows?general?stats ???????memcached-tool?10.0.0.5:11211?settings???#?shows?settings?stats ???????memcached-tool?10.0.0.5:11211?sizes??????#?shows?sizes?stats ???????memcached-tool?10.0.0.5:11211?dump???????#?dumps?keys?and?values WARNING!?sizes?is?a?development?command. As?of?1.4?it?is?still?the?only?command?which?will?lock?your?memcached?instance?for?some?time. If?you?have?many?millions?of?stored?items,?it?can?become?unresponsive?for?several?minutes. Run?this?at?your?own?risk.?It?is?roadmapped?to?either?make?this?feature?optional or?at?least?speed?it?up. "?unless?$addr?&&?$mode; my?$sock; if?($addr?=~?m:/:)?{ ????$sock?=?IO::Socket::UNIX->new( ????????Peer?=>?$addr,????); } else?{ ????$addr?.=?':11211'?unless?$addr?=~?/:d+$/; ????$sock?=?IO::Socket::INET->new( ????????PeerAddr?=>?$addr,????????Proto????=>?'tcp',????); } die?"Couldn't?connect?to?$addrn"?unless?$sock; if?($mode?eq?'dump')?{ ????my?%items; ????my?$totalitems; ????print?$sock?"stats?itemsrn"; ????while?(<$sock>)?{ ????????last?if?/^END/; ????????if?(/^STAT?items:(d*):number?(d*)/)?{ ????????????$items{$1}?=?$2; ????????????$totalitems?+=?$2; ????????} ????} ????print?STDERR?"Dumping?memcache?contentsn"; ????print?STDERR?"??Number?of?buckets:?"?.?scalar(keys(%items))?.?"n"; ????print?STDERR?"??Number?of?items??:?$totalitemsn"; ????foreach?my?$bucket?(sort(keys(%items)))?{ ????????print?STDERR?"Dumping?bucket?$bucket?-?"?.?$items{$bucket}?.?"?total?itemsn"; ????????print?$sock?"stats?cachedump?$bucket?$items{$bucket}rn"; ????????my?%keyexp; ????????while?(<$sock>)?{ ????????????last?if?/^END/; ????????????#?return?format?looks?like?this ????????????#?ITEM?foo?[6?b;?1176415152?s] ????????????if?(/^ITEM?(S+)?[.*?(d+)?s]/)?{ ????????????????$keyexp{$1}?=?$2; ????????????} ????????} ????????foreach?my?$k?(keys(%keyexp))?{ ????????????print?$sock?"get?$krn"; ????????????my?$response?=?<$sock>; ????????????if?($response?=~?/VALUE?(S+)?(d+)?(d+)/)?{ ????????????????my?$flags?=?$2; ????????????????my?$len?=?$3; ????????????????my?$val; ????????????????read?$sock,?$val,?$len; ????????????????print?"add?$k?$flags?$keyexp{$k}?$lenrn$valrn"; ????????????????#?get?the?END ????????????????$_?=?<$sock>; ????????????????$_?=?<$sock>; ????????????} ????????} ????} ????exit; } if?($mode?eq?'stats')?{ ????my?%items; ????print?$sock?"statsrn"; ????while?(<$sock>)?{ ????????last?if?/^END/; ????????chomp; ????????if?(/^STATs+(S*)s+(.*)/)?{ ????????????$items{$1}?=?$2; ????????} ????} ????printf?("#%-17s?%5s?%11sn",?$addr,?"Field",?"Value"); ????foreach?my?$name?(sort(keys(%items)))?{ ????????printf?("%24s?%12sn",?$name,?$items{$name}); ????} ????exit; } if?($mode?eq?'settings')?{ ????my?%items; ????print?$sock?"stats?settingsrn"; ????while?(<$sock>)?{ ????????last?if?/^END/; ????????chomp; ????????if?(/^STATs+(S*)s+(.*)/)?{ ????????????$items{$1}?=?$2; ????????} ????} ????printf?("#%-17s?%5s?%11sn",?$items{$name}); ????} ????exit; } if?($mode?eq?'sizes')?{ ????my?%items; ????print?$sock?"stats?sizesrn"; ????while?(<$sock>)?{ ????????last?if?/^END/; ????????chomp; ????????if?(/^STATs+(S*)s+(.*)/)?{ ????????????$items{$1}?=?$2; ????????} ????} ????printf?("#%-17s?%5s?%11sn",?"Size",?"Count"); ????foreach?my?$name?(sort(keys(%items)))?{ ????????printf?("%24s?%12sn",?$items{$name}); ????} ????exit; } #?display?mode: my?%items;??#?class?->?{?number,?age,?chunk_size,?chunks_per_page,#????????????total_pages,?total_chunks,?used_chunks,#????????????free_chunks,?free_chunks_end?} print?$sock?"stats?itemsrn"; my?$max?=?0; while?(<$sock>)?{ ????last?if?/^END/; ????if?(/^STAT?items:(d+):(w+)?(d+)/)?{ ????????$items{$1}{$2}?=?$3; ????} } print?$sock?"stats?slabsrn"; while?(<$sock>)?{ ????last?if?/^END/; ????if?(/^STAT?(d+):(w+)?(d+)/)?{ ????????$items{$1}{$2}?=?$3; ????????$max?=?$1; ????} } print?"??#??Item_Size??Max_age???Pages???Count???Full???Evicted?Evict_Time?OOMn"; foreach?my?$n?(1..$max)?{ ????my?$it?=?$items{$n}; ????next?if?(0?==?$it->{total_pages}); ????my?$size?=?$it->{chunk_size}?<?1024?? ????????"$it->{chunk_size}B"?: ????????sprintf("%.1fK",?$it->{chunk_size}?/?1024.0); ????my?$full?=?$it->{free_chunks_end}?==?0???"yes"?:?"?no"; ????printf("%3d?%8s?%9ds?%7d?%7d?%7s?%8d?%8d?%4dn",???????????$n,?$size,?$it->{age},?$it->{total_pages},???????????$it->{number},?$full,?$it->{evicted},???????????$it->{evicted_time},?$it->{outofmemory}); } 使用方法: 将上述代码保存为memcached-tool文件.? 查看memcached状态 [root@node1?~]#?perl?Mem.pl??127.0.0.1:11211 ??#??Item_Size??Max_age???Pages???Count???Full???Evicted?Evict_Time?OOM ??1??????96B?????22304s???????1???????3?????yes????????0????????0????0 ??2?????120B?????????0s???????1???????0?????yes????????0????????0????0 [root@node1?~]#?perl?Mem.pl??127.0.0.1:11211?stats #127.0.0.1:11211???Field???????Value ?????????accepting_conns???????????1 ???????????????auth_cmds???????????0 ?????????????auth_errors???????????0 ???????????????????bytes?????????238 ??????????????bytes_read????????7154 ???????????bytes_written??????139374 ??????????????cas_badval???????????0 ????????????????cas_hits???????????0 ??????????????cas_misses???????????0 ???????????????cmd_flush???????????1 ?????????????????cmd_get??????????50 ?????????????????cmd_set??????????67 ???????????????cmd_touch???????????0 ?????????????conn_yields???????????0 ???connection_structures??????????15 ???????crawler_reclaimed???????????0 ????????curr_connections??????????12 ??????????????curr_items???????????3 ???????????????decr_hits??????????30 ?????????????decr_misses???????????0 ?????????????delete_hits???????????2 ???????????delete_misses???????????0 ???????evicted_unfetched???????????0 ???????????????evictions???????????0 ???????expired_unfetched???????????0 ????????????????get_hits??????????36 ??????????????get_misses??????????14 ??????????????hash_bytes??????524288 ???????hash_is_expanding???????????0 ????????hash_power_level??????????16 ???????????????incr_hits??????????30 ?????????????incr_misses???????????0 ????????????????libevent?2.0.21-stable ??????????limit_maxbytes????33554432 ?????listen_disabled_num???????????0 ????????????malloc_fails???????????0 ?????????????????????pid???????48154 ????????????pointer_size??????????64 ???????????????reclaimed???????????1 ????????????reserved_fds??????????20 ???????????rusage_system????0.594909 ?????????????rusage_user????1.153824 ?????????????????threads???????????4 ????????????????????time??1406887940 ???????total_connections?????????175 ?????????????total_items??????????59 ??????????????touch_hits???????????0 ????????????touch_misses???????????0 ??????????????????uptime???????26566 ?????????????????version??????1.4.20 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |