File: //.vs/usr/local/share/statushtdocs/apcmem.php
<?php
if(!function_exists('apc_cache_info') || !($cache=@apc_cache_info($cache_mode))) {
echo "No cache info available. APC does not appear to be running.";
exit;
}
$cache_user = apc_cache_info('user', 1);
$mem=apc_sma_info();
if(!$cache['num_hits']) { $cache['num_hits']=1; $time++; } // Avoid division by 0 errors on a cache clear
// don't cache this page
//
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
// -----------------------------------------------
// Host Stats
// -----------------------------------------------
$mem_size = $mem['num_seg']*$mem['seg_size'];
$mem_avail= $mem['avail_mem'];
$mem_used = $mem_size-$mem_avail;
$seg_size = bsize($mem['seg_size']);
$req_rate = sprintf("%.2f",($cache['num_hits']+$cache['num_misses'])/($time-$cache['start_time']));
$hit_rate = sprintf("%.2f",($cache['num_hits'])/($time-$cache['start_time']));
$miss_rate = sprintf("%.2f",($cache['num_misses'])/($time-$cache['start_time']));
$insert_rate = sprintf("%.2f",($cache['num_inserts'])/($time-$cache['start_time']));
$req_rate_user = sprintf("%.2f",($cache_user['num_hits']+$cache_user['num_misses'])/($time-$cache_user['start_time']));
$hit_rate_user = sprintf("%.2f",($cache_user['num_hits'])/($time-$cache_user['start_time']));
$miss_rate_user = sprintf("%.2f",($cache_user['num_misses'])/($time-$cache_user['start_time']));
$insert_rate_user = sprintf("%.2f",($cache_user['num_inserts'])/($time-$cache_user['start_time']));
$apcversion = phpversion('apc');
$phpversion = phpversion();
$number_files = $cache['num_entries'];
$size_files = bsize($cache['mem_size']);
$number_vars = $cache_user['num_entries'];
$size_vars = bsize($cache_user['mem_size']);
// Computate critical values
$cache_full_count = $cache['expunges'];
// Fragementation: (freeseg - 1) / total_seg
$nseg = $freeseg = $fragsize = $freetotal = 0;
for($i=0; $i<$mem['num_seg']; $i++) {
$ptr = 0;
foreach($mem['block_lists'][$i] as $block) {
if ($block['offset'] != $ptr) {
++$nseg;
}
$ptr = $block['offset'] + $block['size'];
/* Only consider blocks <5M for the fragmentation % */
if($block['size']<(5*1024*1024)) $fragsize+=$block['size'];
$freetotal+=$block['size'];
}
$freeseg += count($mem['block_lists'][$i]);
}
if ($freeseg > 1) {
$frag = ($fragsize/$freetotal)*100;
} else {
$frag = 0;
}
$clearit = 0;
$reason = '';
if ($mem_avail < 1024 * 1024 * 6) {
$clearit = 1;
$reason .= ' NOMEMFREE ';
}
if ($cache_full_count > 12) {
$clearit = 1;
$reason .= ' CACHEFULLCOUNT ';
}
if ($frag > 75) {
$clearit = 1;
$reason .= ' FRAGMENTATION';
if ($frag > 98) {
$reason .= '_FULL ';
} else {
$reason .= '_HIGH ';
}
}
if ($clearit) {
apc_clear_cache();
apc_clear_cache('user');
apc_clear_cache('opcode');
echo "APC caches cleared, reason(s): $reason\n";
} else {
echo "APC caches not cleared\n";
}
//print "$mem_avail\n";
//print "$cache_full_count\n";
//print "$frag\n";
// pretty printer for byte values
//
function bsize($s) {
foreach (array('','K','M','G') as $i => $k) {
if ($s < 1024) break;
$s/=1024;
}
return sprintf("%5.1f %sBytes",$s,$k);
}