php 缓存使用监控测试代码

php 缓存使用监控测试代码。

将以下代码存在PHP WEB网站下面,然后通过IE浏览器进行访问。

#cat ocpcache.php

<?php

/*

* Fetch configuration and status information from OpCache

*/

$config = opcache_get_configuration();

$status = opcache_get_status();

/*

* Turn bytes into a human readable format

* @param $bytes

*/

function size_for_humans($bytes) {

if ($bytes > 1048576) {

return sprintf("%.2f&nbsp;MB", $bytes/1048576);

} else if ($bytes > 1024) {

return sprintf("%.2f&nbsp;kB", $bytes/1024);

} else return sprintf("%d&nbsp;bytes", $bytes);

}

?>

<!DOCTYPE html>

<meta charset="utf-8">

<html><head>

<style>

body{

font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;

margin:auto;

position:relative;

width:1024px;

}

text{

font:10px sans-serif;

}

form{

position: absolute;

right:210px;

top:50px;

}

#graph{

position: absolute;

right:0px;

top:80px;

}

#stats{

position: absolute;

right:234px;

top:240px;

}

tbody tr:nth-child(even) {

background-color:#eee;

}

p.capitalize{

text-transform:capitalize;

}

.tabs{

position:relative;

min-height:200px;

clear:both;

margin:25px 0;

}

.tab{

float:left;

}

.tab label{

background: #eee;

padding:10px;

border:1px solid #ccc;

margin-left:-1px;

position:relative;

left:1px;

}

.tab [type=radio]{

display: none;

}

.content{

position:absolute;

top:28px;

left: 0;

background:white;

padding:20px;

border:1px solid #ccc;

height:500px;

width:480px;

overflow-y:auto;

overflow-x:hidden;

}

.content table {

width:100%;

}

.clickable {

cursor: hand;

cursor: pointer;

}

[type=radio]:checked ~ label{

background: white;

border-bottom:1px solid white;

z-index:2;

}

[type=radio]:checked ~ label ~ .content{

z-index: 1;

}

</style>

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.0.1/d3.v3.min.js"></script>

<script language="javascript">

var hidden = {};

function toggleVisible(head, row) {

if (!hidden[row]) {

d3.selectAll(row)

.transition().style(‘display‘, ‘none‘);

hidden[row] = true;

d3.select(head).transition().style(‘color‘, ‘#ccc‘);

} else {

d3.selectAll(row)

.transition().style(‘display‘);

hidden[row] = false;

d3.select(head).transition().style(‘color‘, ‘#000‘);

}

}

</script>

</head>

<body>

<h1>PHP <?= phpversion()?> OpCache <?= $config[‘version‘][‘version‘]?></h1>

<form>

<label><input type="radio" name="dataset" value="memory" checked> Memory</label>

<label><input type="radio" name="dataset" value="keys"> Keys</label>

<label><input type="radio" name="dataset" value="hits"> Hits</label>

</form>

<div id="stats">

</div>

<div class="tabs">

<div class="tab">

<input type="radio" id="tab-status" name="tab-group-1" checked>

<label for="tab-status">Status</label>

<div class="content">

<table>

<?php

foreach($status as $key=>$value) {

if($key==‘scripts‘) continue;

if(is_array($value)) {

foreach($value as $k=>$v) {

if($v===false) $value = "false";

if($v===true) $value = "true";

if($k==‘used_memory‘ || $k==‘free_memory‘ || $k == ‘wasted_memory‘) $v = size_for_humans($v);

if($k==‘current_wasted_percentage‘ || $k==‘opcache_hit_rate‘) $v = number_format($v,2).‘%‘;

if($k==‘blacklist_miss_ratio‘) $v = number_format($v,2);

echo "<tr><th align=\"left\">$k</th><td align=\"right\">$v</td></tr>\n";

}

continue;

}

if($value===false) $value = "false";

if($value===true) $value = "true";

echo "<tr><th align=\"left\">$key</th><td align=\"right\">$value</td></tr>\n";

}

?>

</table>

</div>

</div>

<div class="tab">

<input type="radio" id="tab-config" name="tab-group-1">

<label for="tab-config">Configuration</label>

<div class="content">

<table>

<?php

foreach($config[‘directives‘] as $key=>$value) {

if($value===false) $value = "false";

if($value===true) $value = "true";

if($key == ‘opcache.memory_consumption‘) $value = size_for_humans($value);

echo "<tr><th align=\"left\">$key</th><td align=\"right\">$value</td></tr>\n";

}

?>

</table>

</div>

</div>

<div class="tab">

<input type="radio" id="tab-scripts" name="tab-group-1">

<label for="tab-scripts">Scripts (<?=count($status["scripts"]); ?>)</label>

<div class="content">

<table style="font-size:0.8em;">

<tr>

<th width="10%">Hits</th>

<th width="20%">Memory</th>

<th width="70%">Path</th>

</tr>

<?php

foreach($status[‘scripts‘] as $key=>$data) {

$dirs[dirname($key)][basename($key)]=$data;

}

asort($dirs);

$id = 1;

foreach($dirs as $dir => $files) {

$count = count($files);

if ($count > 1) {

echo "<tr>";

echo "<th class=\"clickable\" id=\"head-{$id}\" colspan=\"3\"  ‘#row-{$id}‘)\">{$dir} ({$count} files)</th>";

echo "</tr>";

}

foreach ($files as $file => $data) {

echo "<tr id=\"row-{$id}\">";

echo "<td>{$data["hits"]}</td>";

echo "<td>" .size_for_humans($data["memory_consumption"]). "</td>";

if ($count > 1) {

echo "<td>{$file}</td>";

} else echo "<td>{$dir}/{$file}</td>";

echo "</tr>";

}

++$id;

}

?>

</table>

</div>

</div>

</div>

<div id="graph">

</div>

<?php

$mem = $status[‘memory_usage‘];

$stats = $status[‘opcache_statistics‘];

$free_keys = $stats[‘max_cached_keys‘] - $stats[‘num_cached_keys‘];

echo <<<EOB

<script>

var dataset = {

memory: [{$mem[‘used_memory‘]},{$mem[‘free_memory‘]},{$mem[‘wasted_memory‘]}],

keys: [{$stats[‘num_cached_keys‘]},{$free_keys},0],

hits: [{$stats[‘hits‘]},{$stats[‘misses‘]},0]

};

EOB;

?>

var width = 600,

height = 400,

radius = Math.min(width, height) / 2;

var color = d3.scale.category20();

var pie = d3.layout.pie()

.sort(null);

var arc = d3.svg.arc()

.innerRadius(radius - 20)

.outerRadius(radius - 50);

var svg = d3.select("#graph").append("svg")

.attr("width", width)

.attr("height", height)

.append("g")

.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

var path = svg.selectAll("path")

.data(pie(dataset.memory))

.enter().append("path")

.attr("fill", function(d, i) { return color(i); })

.attr("d", arc)

.each(function(d) { this._current = d; }); // store the initial values

d3.selectAll("input").on("change", change);

set_text("memory");

function set_text(t) {

if(t=="memory") {

d3.select("#stats").html(

"<table><tr><th style=‘background:#1f77b4;‘ align=right>Used</th><td align=right><?php echo size_for_humans($mem[‘used_memory‘])?></td></tr>"+

"<tr><th style=‘background:#aec7e8;‘ align=right>Free</th><td align=right><?php echo size_for_humans($mem[‘free_memory‘])?></td></tr>"+

"<tr><th style=‘background:#ff7f0e;‘ align=right>Wasted</th><td align=right><?php echo size_for_humans($mem[‘wasted_memory‘])?></td></tr>"+

"<tr><th style=‘background:#ff7f0e;‘> </th><td align=right><?php echo number_format($mem[‘current_wasted_percentage‘],2)?>%</td></tr></table>"

);

} else if(t=="keys") {

d3.select("#stats").html(

"<table><tr><th style=‘background:#1f77b4;‘>Cached keys</th><td align=right>"+dataset[t][0]+"</td></tr>"+

"<tr><th style=‘background:#aec7e8;‘>Free Keys</th><td align=right>"+dataset[t][1]+"</td></tr></table>"

);

} else if(t=="hits") {

d3.select("#stats").html(

"<table><tr><th style=‘background:#1f77b4;‘ align=right>Cache Hits</th><td align=right>"+dataset[t][0]+"</td></tr>"+

"<tr><th style=‘background:#aec7e8;‘ align=right>Misses</th><td align=right>"+dataset[t][1]+"</td></tr></table>"

);

}

}

function change() {

path = path.data(pie(dataset[this.value])); // update the data

path.transition().duration(750).attrTween("d", arcTween); // redraw the arcs

set_text(this.value);

}

function arcTween(a) {

var i = d3.interpolate(this._current, a);

this._current = i(0);

return function(t) {

return arc(i(t));

};

}

</script>

</body>

</html>

时间: 2024-10-17 16:39:34

php 缓存使用监控测试代码的相关文章

03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

 1 PersonTestMapper.xml中的内容如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间

五个常用的Linux监控脚本代码

bash中 2>&1 & 的解释 1.首先,bash中0,1,2三个数字分别代表STDIN_FILENO.STDOUT_FILENO.STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出). 2.输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test.c 将test.c重定向为cat命令的输入源.输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls >

iOS开发:XCTest单元测试(附上一个单例的测试代码)

测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编写了一段代码,如何编译运行,查看结果是否正确,很多时候,还得自己想很多特殊的(比如说零值,边界值)测试数据来检测所写代码.算法是否正确.那个时候,感觉还好,比较输出只是只是控制台的一个简单的数字或者字符.在学习iOS开发中,很多时候也是要测试的,这种输出是必须在点击一系列按钮之后才能在屏幕上显示出来

前端测试代码测试

一:前端测试的背景.为什么做测试 1.测试分类 (1).TDD(Test-Driven Development) 测试驱动开发(2).BDD(Behavior Drive Development) 行为驱动开发 它通过用自然语言书写非程序员可读的测试用例扩展了测试驱动开发方法 这让开发者得以把精力集中在代码应该怎么写,而不是技术细节上 - 伪代码(3).DDD(Domain Drive Design) 领域驱动开发 各个层次之间的调用问题 DDD是告诉我们如何做好业务层!并以领域驱动设计思想来选

测试代码

   编写函数或类时,还可以为其编写测试.通过测试,可确定代码面对各种输入都能够按照要求那样工作. 单元测试和测试用例:   单元测试用于核实蛮熟的某个方面没有问题:测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求. 良好的测试用例考虑到了函数可能收到的各种输入,包含针对这些所有情形的测试. 全覆盖测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式.对于大型项目,要实现覆盖可能很难.所以通常,最初只要针对 代码的重要行为编写测试即可,等项目被广泛使用率再考虑全覆

第4次作业类测试代码+105032014166+张珍珍

第4次作业:准备类测试代码 类测试代码的具体要求如下: (1)设计三角形完整程序 已经完成的方法是:  String triangle(int a,int b,int c) 现在要求继续增加新的功能: 建立界面,至少包含以下元素,但不限于此: 完成面积的方法:float triangleArea(int a,int b,int c) ,完成周长的方法:int perimeter(int a,int b,int c) 要求: 1.        画出类图: 2.        完成界面和相应的功能

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

MyPython--&gt;进阶篇--&gt;测试代码

测试函数 要学习测试,得要有测试的代码.下面是一个简单的函数,接受名和姓并返回整洁的姓名 name_function.py def get_allname(x,m): allname = ('%s %s'%(x,m)).title() return allname 编写测试代码 from name_function import get_allname print(get_allname('cc','leo')) import unittest class NameTestCase(unitte

x264测试代码

建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h"  //如果没有,下载地址为:http://download.csdn.net/detail/evsqiezi/7014021extern "C"{#include "x264.h"#include "x264_config.h"};usi