php7的初体验

在微博中关注了新浪鸟哥,听过phpng(php7-dev)性能提高了不少,于是趁着周末有空赶紧尝试一下。

一、安装

Github上下载安装源码:点击访问

生成配置文件

进行配置

编译安装

make编译的时候,可能会碰到报错如下:

那是因为编译的时候没抓好一些环境变数值,错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 函式库参数。

解决方法如下:

编辑Makefile 大约 105 行左右的地方: EXTRA_LIBS = ….. -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ….. -lcrypt -liconv

编辑后重新makemake install就可以了。

查看信息

测试

测试机器环境:4台虚拟机,内存4096MB
测试php版本:php7-devphp5.6.4php5.5.21php5.3.17
测试工具:httperf
测试方式: 并发2000,进行100000次请求
测试脚本:输出hello world

测试结果:

测试总结:
就QPS来说,php7-devphp5.6.4较之php5.3.175.5.21几乎翻了一倍。
从成功率来说,php7-dev100000次请求全部成功,php5.6.4的失败率较高还不知道是什么原因。

总体来说php7还是非常值得期待的。

附:
新浪鸟哥做的php7对应hhvm的测试比较

天然的memcache —— /dev/shm

首先让我们认识一下,什么是tmpfs和/dev/shm/?

tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。由此可见,tmpfs主要存储暂存的文件。
它有如下2个优势 :
1. 动态文件系统的大小。
2. tmpfs 的另一个主要的好处是它闪电般的速度。
因为典型的 tmpfs 文件系统会完全驻留在内存 RAM 中,读写几乎可以是瞬间的。同时它也有一个缺点 tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。

tmpfs不具备持久性,重启后数据不保留,请务必注意!!!

性能测试

分别对磁盘、/dev/shm、memcache进行10W次读、写、读写操作。

inotify

一、简介

inotify是系统体层提供的机制,在版本号大于2.6.13的内核中才有提供(之前kernel版本,有dnotify)。PHP官方扩展库pecl提供了该扩展包。关于inotify的基本原理和用法介绍,可以看IBM的文档

inotify的API接口非常少,只有5个函数,inotify_init,inotifiy_read,inotify_add_watch,inotify_rm_watch,inotify_qeueue_len, 这几个函数的含义还是相当直接的,估计比较难理解的,就只有一个init和read函数了。这里简单解释一下,inotify是一个类似队列一样的东西, 把需要监控的一批文件和目录,加入到同一个inotify队列中,所以首先要先init一个空队列出来,然后用add_watch函数来添加监控对象。然 后,read函数就能大显身手了,read函数可以产生一个(默认)阻塞的操作,查询监控的对象中是否有事件发生,如果有,就会返回数据,否则就一直阻 塞。当然,也可以设置成非阻塞的,可以看相关代码范例。

inotify能够监控的文件系统事件罗列如下,基本上涵盖了linux server上的所有的文件事件。根据PHP官方文档和我实际测试,inotify不支持目录递归遍历,所以,如果要监控目录的变化,需要把每一个子目录 都加入到watch的列表中去。除此之外,因为我在虚拟机上测试,还发现了一点,就是宿主机编辑共享文件,guest系统中的inotify无法监控到文 件的变化。

二、安装

1、 使用pecl安装

2、 编译安装

安装完成后,在php.ini后面添加扩展

三、监控文件