debian安装vld来查看Opcode,PHP调优。
一: 我的环境:
Debian 7 (wheezy) x64
PHP 5.4.4-14 (apt-get 而来)
Apache/2.2.22 (同上,非源码编译)
二 :安装vld. (# 代表是root下,下面不再说明. wget过来的是0.11.2的版本)
首先我用pecl install channel://pecl.php.net/vld-0.10.1 安装了一次,最后make install的时候失败了。于是换一种
#wget http://pecl.php.net/get/vld
#tar zxvf vld
#cd vld-0.11.2
#phpize
#./configure
#make install
现在去查看下/usr/lib/php5/20100525 下是否有vld.so
三:加到php里面去
#cd /etc/php5/mods-available 到php的模块目录去
#touch vld.ini 建个叫vld.ini 的配置文件
#echo -ne "; configuration for php VLD module \n; priority=20 \nextension=/usr/lib/php5/20100525/vld.so \n" > vld.ini 这里我比较懒。直接一句就把内容写完了,里面的vld.so是之前编译完后的vld.so 文件
#cd /etc/php5/conf.d
#ln -s ../mods-available/vld.ini 20-vld.ini 给vld.ini 做一个软链接
#/etc/init.d/apache2 restart 重启下apache就行了
四:使用vld
例子很简单的。新建两个php文件,输出一个用 . ,一个用 , 连起来
1.php
<?php echo "Hello"." "."world!" ?>
2.php
<?php echo "Hello"," ","world!" ?>
在shell里面执行
#php -dvld.active=1 1.php
#php -dvld.active=1 2.php
然后可以看到
root@debian:/home/www$ php -dvld.active=1 1.php
Finding entry points
Branch analysis from position: 0
Return found
filename: /home/www/1.php
function name: (null)
number of ops: 4
compiled vars: none
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > CONCAT ~0 'Hello', '+'
1 CONCAT ~1 ~0, 'world%21'
2 ECHO ~1
2 3 > RETURN 1 branch: # 0; line: 1- 2; sop: 0; eop: 3
path #1: 0,
root@debian:/home/www$ php -dvld.active=1 2.php
Finding entry points
Branch analysis from position: 0
Return found
filename: /home/www/2.php
function name: (null)
number of ops: 4
compiled vars: none
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > ECHO 'Hello'
1 ECHO '+'
2 ECHO 'world%21'
2 3 > RETURN 1 branch: # 0; line: 1- 2; sop: 0; eop: 3
path #1: 0,
Hello world!root@debian:/home/www$
上面就包含了PHP运行时所执行的Opcode信息,输出了执行的操作的个数,所有的变量集输出(compiled vars),还有一个包含执行操作的PHP代码行号,执行操作的次数(#)以及所执行操作的名称(op)。
我们重点关注关键项的数量,op的个数以及执行顺序。number of ops (OP数)标明了代码运行时在Opcode层级执行的操作总个数。在上面两个文件都是4次。
可以看到 1.php 执行用 "." 连接的时候,用了两个CONCAT(连接调用)和一个ECHO调用。
2.php 执行用 "," 连接的时候,没有用CONCAT操作,只有比CONCAT调用成本更低的ECHO调用。
所以这里我们可以得出一个简单的结论,就是用 "," 连接比用 "." 连接要快。
实际在编写PHP代码的时候,我们需要考虑是empty快还是isset好,是,快还是 .好,我们可以通过VLD来看看OP数是多少,具体都执行了什么操作,这样就可以得到正确的合适的选择了。
debian安装vld来查看Opcode,PHP调优。的更多相关文章
- Linux下安装、配置、授权、调优Mysql
以前在linux已经安装了很多次的Mysql,但是时间间隔长了以后,安装步骤总是会遗漏,趁这次安装,做一下安装记录. 检查系统是否已经安装Mysql rpm -qa|grep -i mysql Mys ...
- (转)centos 7 Tomcat 8.5 的安装及生产环境的搭建调优
原文:https://www.cnblogs.com/linhankbl/articles/9149804.html#top JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7.8性能对比) ...
- nginx安装以及调优
目录: 1.安装nginx 2.配置nginx 3.调优nginx 4.性能测试 ps:为了方便,文档使用docker容器来操作的. 1.安装nginx 1.1 启动容器.download nginx ...
- Nginx 源码安装和调优
常见web架构: LAMP =Linux+Apache+Mysql+PHP LNMP =Linux+Nginx+Mysql+PHP nginx概述: 知道:1 不知道:2 Nginx (&q ...
- mysql日常运维与参数调优
日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事 ...
- JVM调优基础到进阶
GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上 ...
- Nginx源码安装及调优配置
导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...
- Nginx源码安装及调优配置(转)
导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前 ...
- 开源服务专题之------sshd服务安装管理及配置文件理解和安全调优
本专题我将讨论一下开源服务,随着开源社区的日趋丰富,开源软件.开源服务,已经成为人类的一种公共资源,发展势头可谓一日千里,所以不可不知.SSHD服务,在我们的linux服务器上经常用到,很重要,涉及到 ...
随机推荐
- [C#参考]利用Socket连续发送数据
这个例子只是一个简单的连续发送数据,接收数据的DEMO.因为最近做一个项目,要求robot连续的通过Socket传回自己的当前的位置坐标,然后客户端接收到坐标信息,在本地绘制地图,实时显示robot的 ...
- Hibernate知识总结(一)——Hibernate原理概述
一.Hibernate是什么: 它是一个持久化框架,它对JDBC进行了轻量级的封装,简化对数据库的操作,提高开发效率.和另一个持久化框架MyBatis一样,他们操作数据库都是通过一个session对象 ...
- python读取中文文件编码问题
python 读取中文文件后,作为参数使用,经常会遇到乱码或者报错asii错误等. 我们需要对中文进行decode('gbk') 如我有一个data.txt文件有如下内容: 百度 谷歌 现在想读取文件 ...
- day6_python学习笔记_chapter8_条件,循环
1. if elif else 2. 条件表达式:三元操作符: smaller = x if x < y else y == if x < y : smaller =x else : ...
- java如何引入接口中定义的常量
接口 (A.java) : package config; public interface A { String PROJECT_ROOT_DIR = System.getProperty(&quo ...
- 关于mysqli 连接数不能正确释放的解决方案
/** * 析构函数 */ //解决重复链接的问题 private $db_handler = null; function __destruct() { Log::logWrite($this-&g ...
- ExpandableListView(三)只展开一个group,没有child不展开group
本文是自己在实践中,发现的问题. 有时候想让界面更加的人性化,就要实现很多的效果,比如只展开一个group,在点击下个group的同时,关闭之前的group 在一个ExpandableListView ...
- 虎说:bootstrap源码解读(重置模块)
------<!--action-->------ 开场show:前不生“不犹豫”,后半生“不后悔”.今天又逃课,我不后悔 素材:推特公司的前端框架bootstrap(下称bt),解读源码 ...
- Hibernate学习之hibernate状态
hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就 ...
- python 冒泡和快排,不多说【无聊】
#-*-coding:utf8-*- import random a=[] b=[] def init_array(): for i in range(10000): v = random.randi ...