您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP监测memcache服务端的运行状况

2024/7/29 17:58:12发布32次查看
.
代码如下,代码为memcache官方代码,引用在此,做一下简单的说明:
1、设置用户名和密码
define('admin_username','admin'); // admin username
define('admin_password','123456');   // admin password
2、配置服务器及其端口,可以配置多台
$memcache_servers[] = 'localhost:11211'; // add more as an array
$memcache_servers[] = 'localhost:11212'; // add more as an array
$size); $res[$l[0]][$l[1]]['value']=$lines[++$i]; } }elseif($line=='deleted' || $line=='not_found' || $line=='ok'){ return $line; } } return $res;}function dumpcacheslab($server,$slabid,$limit){ list($host,$port) = explode(':',$server); $resp = sendmemcachecommand($host,$port,'stats cachedump '.$slabid.' '.$limit); return $resp;}function flushserver($server){ list($host,$port) = explode(':',$server); $resp = sendmemcachecommand($host,$port,'flush_all'); return $resp;}function getcacheitems(){ $items = sendmemcachecommands('stats items'); $serveritems = array(); $totalitems = array(); foreach ($items as $server=>$itemlist){ $serveritems[$server] = array(); $totalitems[$server]=0; if (!isset($itemlist['stat'])){ continue; } $iteminfo = $itemlist['stat']; foreach($iteminfo as $keyinfo=>$value){ if (preg_match('/items\:(\d+?)\:(.+?)$/',$keyinfo,$matches)){ $serveritems[$server][$matches[1]][$matches[2]] = $value; if ($matches[2]=='number'){ $totalitems[$server] +=$value; } } } } return array('items'=>$serveritems,'counts'=>$totalitems);}function getmemcachestats($total=true){ $resp = sendmemcachecommands('stats'); if ($total){ $res = array(); foreach($resp as $server=>$r){ foreach($r['stat'] as $key=>$row){ if (!isset($res[$key])){ $res[$key]=null; } switch ($key){ case 'pid': $res['pid'][$server]=$row; break; case 'uptime': $res['uptime'][$server]=$row; break; case 'time': $res['time'][$server]=$row; break; case 'version': $res['version'][$server]=$row; break; case 'pointer_size': $res['pointer_size'][$server]=$row; break; case 'rusage_user': $res['rusage_user'][$server]=$row; break; case 'rusage_system': $res['rusage_system'][$server]=$row; break; case 'curr_items': $res['curr_items']+=$row; break; case 'total_items': $res['total_items']+=$row; break; case 'bytes': $res['bytes']+=$row; break; case 'curr_connections': $res['curr_connections']+=$row; break; case 'total_connections': $res['total_connections']+=$row; break; case 'connection_structures': $res['connection_structures']+=$row; break; case 'cmd_get': $res['cmd_get']+=$row; break; case 'cmd_set': $res['cmd_set']+=$row; break; case 'get_hits': $res['get_hits']+=$row; break; case 'get_misses': $res['get_misses']+=$row; break; case 'evictions': $res['evictions']+=$row; break; case 'bytes_read': $res['bytes_read']+=$row; break; case 'bytes_written': $res['bytes_written']+=$row; break; case 'limit_maxbytes': $res['limit_maxbytes']+=$row; break; case 'threads': $res['rusage_system'][$server]=$row; break; } } } return $res; } return $resp;}////////////////////////////////////////////////////////// don't cache this page//header(cache-control: no-store, no-cache, must-revalidate); // http/1.1header(cache-control: post-check=0, pre-check=0, false);header(pragma: no-cache); // http/1.0function duration($ts) { global $time; $years = (int)((($time - $ts)/(7*86400))/52.177457); $rem = (int)(($time-$ts)-($years * 52.177457 * 7 * 86400)); $weeks = (int)(($rem)/(7*86400)); $days = (int)(($rem)/86400) - $weeks*7; $hours = (int)(($rem)/3600) - $days*24 - $weeks*7*24; $mins = (int)(($rem)/60) - $hours*60 - $days*24*60 - $weeks*7*24*60; $str = ''; if($years==1) $str .= $years year, ; if($years>1) $str .= $years years, ; if($weeks==1) $str .= $weeks week, ; if($weeks>1) $str .= $weeks weeks, ; if($days==1) $str .= $days day,; if($days>1) $str .= $days days,; if($hours == 1) $str .= $hours hour and; if($hours>1) $str .= $hours hours and; if($mins == 1) $str .= 1 minute; else $str .= $mins minutes; return $str;}// create graphics//function graphics_avail() { return extension_loaded('gd');}function bsize($s) { foreach (array('','k','m','g') as $i => $k) { if ($s $title; } return
$title;}function getheader(){ $header =
memcache info memcache memcache.php by harun yayli
eob; return $header;}function getfooter(){ global $version; $footer = '
'; return $footer;}function getmenu(){ global $php_self;echo
;if ($_get['op']!=4){echo refresh dataeob;}else {echo backeob;}echo menu_entry(1,'view host stats'), menu_entry(2,'variables');echo
eob;}// todo, auth$_get['op'] = !isset($_get['op'])? '1':$_get['op'];$php_self= isset($_server['php_self']) ? htmlentities(strip_tags($_server['php_self'],'')) : '';$php_self=$php_self.'?';$time = time();// sanitize _getforeach($_get as $key=>$g){ $_get[$key]=htmlentities($g);}// singleout// when singleout is set, it only gives details for that server.if (isset($_get['singleout']) && $_get['singleout']>=0 && $_get['singleout'] $y) imagefilledrectangle($im, $x, $y, $x1, $y1, $color2); else imagefilledrectangle($im, $x, $y1, $x1, $y, $color2); imagerectangle($im, $x, $y1, $x1, $y, $color1); if ($text) { if ($placeindex>0) { if ($placeindex0) { imageline($im,$centerx + $r*cos($w)/2, $centery + $r*sin($w)/2,$diameter, $placeindex*12,$color1); imagestring($im,4,$diameter, $placeindex*12,$text,$color1); } else { imagestring($im,4,$centerx + $r*cos($w)/2, $centery + $r*sin($w)/2,$text,$color1); } } } $size = graph_size; // image size $image = imagecreate($size+50, $size+10); $col_white = imagecolorallocate($image, 0xff, 0xff, 0xff); $col_red = imagecolorallocate($image, 0xd0, 0x60, 0x30); $col_green = imagecolorallocate($image, 0x60, 0xf0, 0x60); $col_black = imagecolorallocate($image, 0, 0, 0); imagecolortransparent($image,$col_white); switch ($_get['img']){ case 1: // pie chart $tsize=$memcachestats['limit_maxbytes']; $avail=$tsize-$memcachestats['bytes']; $x=$y=$size/2; $angle_from = 0; $fuzz = 0.000001; foreach($memcachestatssingle as $serv=>$mcs) { $free = $mcs['stat']['limit_maxbytes']-$mcs['stat']['bytes']; $used = $mcs['stat']['bytes']; if ($free>0){ // draw free $angle_to = ($free*360)/$tsize; $perc =sprintf(%.2f%%, ($free *100) / $tsize) ; fill_arc($image,$x,$y,$size,$angle_from,$angle_from + $angle_to ,$col_black,$col_green,$perc); $angle_from = $angle_from + $angle_to ; } if ($used>0){ // draw used $angle_to = ($used*360)/$tsize; $perc =sprintf(%.2f%%, ($used *100) / $tsize) ; fill_arc($image,$x,$y,$size,$angle_from,$angle_from + $angle_to ,$col_black,$col_red, '('.$perc.')' ); $angle_from = $angle_from+ $angle_to ; } } break; case 2: // hit miss $hits = ($memcachestats['get_hits']==0) ? 1:$memcachestats['get_hits']; $misses = ($memcachestats['get_misses']==0) ? 1:$memcachestats['get_misses']; $total = $hits + $misses ; fill_box($image, 30,$size,50,-$hits*($size-21)/$total,$col_black,$col_green,sprintf(%.1f%%,$hits*100/$total)); fill_box($image,130,$size,50,-max(4,($total-$hits)*($size-21)/$total),$col_black,$col_red,sprintf(%.1f%%,$misses*100/$total)); break; } header(content-type: image/png); imagepng($image); exit;}echo getheader();echo getmenu();switch ($_get['op']) { case 1: // host stats $phpversion = phpversion(); $memcachestats = getmemcachestats(); $memcachestatssingle = getmemcachestats(false); $mem_size = $memcachestats['limit_maxbytes']; $mem_used = $memcachestats['bytes']; $mem_avail= $mem_size-$mem_used; $starttime = time()-array_sum($memcachestats['uptime']); $curr_items = $memcachestats['curr_items']; $total_items = $memcachestats['total_items']; $hits = ($memcachestats['get_hits']==0) ? 1:$memcachestats['get_hits']; $misses = ($memcachestats['get_misses']==0) ? 1:$memcachestats['get_misses']; $sets = $memcachestats['cmd_set']; $req_rate = sprintf(%.2f,($hits+$misses)/($time-$starttime)); $hit_rate = sprintf(%.2f,($hits)/($time-$starttime)); $miss_rate = sprintf(%.2f,($misses)/($time-$starttime)); $set_rate = sprintf(%.2f,($sets)/($time-$starttime)); echo general cache information php version $phpversion
eob; echo memcached host. ((count($memcache_servers)>1) ? 's':''). ; $i=0; if (!isset($_get['singleout']) && count($memcache_servers)>1){ foreach($memcache_servers as $server){ echo ($i+1).'. '.$server.'
'; } } else{ echo '1.'.$memcache_servers[0]; } if (isset($_get['singleout'])){ echo '(all servers)
'; } echo
\n; echo total memcache cache .bsize($memcachestats['limit_maxbytes']).
\n; echo
memcache server informationeob; foreach($memcache_servers as $server){ echo ''; echo ''.$server.' [flush this server]
'; echo 'start time ',date(date_format,$memcachestatssingle[$server]['stat']['time']-$memcachestatssingle[$server]['stat']['uptime']),'
'; echo 'uptime ',duration($memcachestatssingle[$server]['stat']['time']-$memcachestatssingle[$server]['stat']['uptime']),'
'; echo 'memcached server version '.$memcachestatssingle[$server]['stat']['version'].'
'; echo 'used cache size ',bsize($memcachestatssingle[$server]['stat']['bytes']),'
'; echo 'total cache size ',bsize($memcachestatssingle[$server]['stat']['limit_maxbytes']),'
'; echo '
'; } echo host status diagrams eob; $size='width='.(graph_size+50).' height='.(graph_size+10); echo cache usage hits & misses eob; echo graphics_avail() ? ''. .
\n : , '', ' free: ',bsize($mem_avail).sprintf( (%.1f%%),$mem_avail*100/$mem_size), \n, ' hits: ',$hits.sprintf( (%.1f%%),$hits*100/($hits+$misses)), \n, '
', '', ' used: ',bsize($mem_used ).sprintf( (%.1f%%),$mem_used *100/$mem_size), \n, ' misses: ',$misses.sprintf( (%.1f%%),$misses*100/($hits+$misses)), \n; echo
cache information current items(total) $curr_items ($total_items)
hits {$hits}
misses {$misses}
request rate (hits, misses) $req_rate cache requests/second
hit rate $hit_rate cache requests/second
miss rate $miss_rate cache requests/second
set rate $set_rate cache requests/second
eob; break; case 2: // variables $m=0; $cacheitems= getcacheitems(); $items = $cacheitems['items']; $totals = $cacheitems['counts']; $maxdump = max_item_dump; foreach($items as $server => $entries) { echo $server
slab idinfo
eob; foreach($entries as $slabid => $slab) { $dumpurl = $php_self.'&op=2&server='.(array_search($server,$memcache_servers)).'&dumpslab='.$slabid; echo , ,'',$slabid,'', , item count: ,$slab['number'],'
age:',duration($time-$slab['age']),'
evicted:',((isset($slab['evicted']) && $slab['evicted']==1)? 'yes':'no'); if ((isset($_get['dumpslab']) && $_get['dumpslab']==$slabid) && (isset($_get['server']) && $_get['server']==array_search($server,$memcache_servers))){ echo
items: item
; $items = dumpcacheslab($server,$slabid,$slab['number']); // maybe someone likes to do a pagination here :) $i=1; foreach($items['item'] as $itemkey=>$iteminfo){ $iteminfo = trim($iteminfo,'[ ]'); echo '',$itemkey,''; if ($i++ % 10 == 0) { echo '
'; } elseif ($i!=$slab['number']+1){ echo ','; } } } echo
; $m=1-$m; } echo
eob;} break; break; case 4: //item dump if (!isset($_get['key']) || !isset($_get['server'])){ echo no key set!; break; } // i'm not doing anything to check the validity of the key string. // probably an exploit can be written to delete all the files in key=base64_encode(\n\r delete all). // somebody has to do a fix to this. $thekey = htmlentities(base64_decode($_get['key'])); $theserver = $memcache_servers[(int)$_get['server']]; list($h,$p) = explode(':',$theserver); $r = sendmemcachecommand($h,$p,'get '.$thekey); echo serverkeyvaluedelete
eob; echo ,$theserver, ,$thekey,
flag:,$r['value'][$thekey]['stat']['flag'],
size:,bsize($r['value'][$thekey]['stat']['size']), ,chunk_split($r['value'][$thekey]['value'],40), , 'delete ,
; echo
eob; break; case 5: // item delete if (!isset($_get['key']) || !isset($_get['server'])){ echo no key set!; break; } $thekey = htmlentities(base64_decode($_get['key'])); $theserver = $memcache_servers[(int)$_get['server']]; list($h,$p) = explode(':',$theserver); $r = sendmemcachecommand($h,$p,'delete '.$thekey); echo 'deleting '.$thekey.':'.$r; break; case 6: // flush server $theserver = $memcache_servers[(int)$_get['server']]; $r = flushserver($theserver); echo 'flush '.$theserver.:.$r; break;}echo getfooter();?>
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product