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服务器上经常用到,很重要,涉及到 ...
随机推荐
- Ubuntu的快捷键
正如大家都知道的那样,Ubuntu的终端的Terminal能快捷的操作该linux系统,减少鼠标的使用.(vim党,尽量避免使用鼠标) 在Ubuntu中,终端的快捷键为(大小写无关的): Ctrl + ...
- PHP图片裁剪函数(图像不变形)
PHP图片裁剪函数(图像不变形) <? *exif_imagetype -- 判断一个图像的类型 *说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 ...
- 使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写
最近项目使用symfony框架,这个框架对数据库的操作在这个团队里使用的是ORM进行操作,说实话使用ORM的开发效率和运行效率不一定高多少,到是它的实体命名和现有数据库字段的命名不太一样,ORM实体属 ...
- win7本地搭建git ssh服务器
本来是想在gogs上用ssh的,结果弄了好几次还没整明白,希望等他们的更新内置吧. 但是,意外收获,还是成功搭建了本地ssh服务器,只是没有和gogs成功关联. 简要记录一下: 主要软件: msysg ...
- Naive Bayes Theorem and Application - Theorem
Naive Bayes Theorm And Application - Theorem Naive Bayes model: 1. Naive Bayes model 2. model: discr ...
- python网络编程-01
python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...
- Linux同平台Oracle数据库整体物理迁移
Linux同平台数据库整体物理迁移需求:A机器不再使用,要将A机器的Oracle迁移到B机器.之前写过类似需求的文章: http://www.linuxidc.com/Linux/2015-05/11 ...
- Intellij IDEA + Android SDK + Genymotion Emulator打造最佳Android开发
原文:Intellij IDEA + Android SDK + Genymotion Emulator打造最佳Android开发 Intellij IDEA + Android SDK + Geny ...
- Asp.net MVC中关于@Html标签的使用
@Html帮助器简单说明,记录些基本的跟HTML中对应的@html帮助器,@Html基本包含了html中的表单控件和常用Html 在@Html中,带有For的主要是针对强类型的Html类型. 用于说明 ...
- findbugs的ant脚本实践
<?xml version="1.0" encoding="UTF-8"?> <project name="codeCheck&qu ...