又到清明时,雨纷纷,人觞觞.有空闲的时间来学习记录点其他的东西.
简介:
大家都知道FaceBook一直是开源界旗帜之一,FaceBook主页业务
也是由PHP来开发完成,FaceBook的访问量,业务能力在业界可谓
拔得头筹,当然单纯的PHP基于半解释半编译的性能可能不对其胃口.
因此FaceBook自助研发了更高性能的PHP虚拟机,旨在将PHP代码
在运行时转换为更高效率的C++代码(AOT 静态链接编译),至于程
序逻辑并不是我们关注的,我们要关注如何配置在不同环境发挥它
的最大性能. :)
有兴趣的朋友 请 hhvm.com, 项目始于2010年,项目性能毋庸置疑.
最新版本是 2.4 stable , 3.1 还在develop. github-hhvm
尝试:
hhvm的安装目前分为两种方式:
源码编译:
过程比较繁琐复杂,由于初试HHVM,不需要过多定制,暂不采用.
RPM安装:
这一次先用RPM方式尝鲜即可.官方已放出了RPM的安装方式
# 将源配置文件下载到 /etc/yum.repos.d/ 下
wget http://www.hop5.in/yum/el6/hop5.repo
# 移除 gnote 可能会后面软件起冲突
rpm -e gnote
# 确保机器上有httpd2.2+的版本
yum -y install httpd
# 挂载 centos 发行光盘第二张,安装如下包
rpm -ivh libc-client-2007e-11.el6.x86_64.rpm
rpm -ivh oniguruma-5.9.1-3.1.el6.x86_64.rpm
# 剩下应该就能一路向下了
yum -y install hhvm
安装完毕后我们可 rpm -ql hhvm 查询安装情况
# 这几个是我们要关注的东东
/usr/lib64/hiphop-php/hphp
/etc/profile.d/hphp.sh
/usr/bin/hhvm
运行:
hhvm 运行有模式概念, run (默认参数) | debug 交互调试 | server 前台模式 | daemon 服务 | replay | translate (t)
我们只关注 deamon , 将HHVM变为后台服务 , 来等待用户响应 . 此概念与PHP-FPM如出一辙
当然在你初次接触之时还推荐你 server 模式,此模式不需要任何配置文件即可启动,这对于首次
运行它相当重要.
server模式:
# server 模式启动
hhvm -m server index.php
第一次接触相当顺利,好感++有木有 : )
deamon模式:
hhvm的配置需要自己手写完成,daemon服务的启动也需要依赖它来完成 请 hhvm options
# 在这里我们完成了一个最简单最基本的配置文件 vim /etc/hhvm.conf
# 我们把没必要都不弄上来
# pid 文件
PidFile = /var/run/hhvm.pid
# 运行日志文件
Log {
Level = None #(default) | Error | Warning | Info | Verbose
NoSilencer = false
AlwaysLogUnhandledExceptions = true
RuntimeErrorReportingLevel = 8191
Header = false
InjectedStackTrace = true
NativeStackTrace = true
MaxMessagesPerRequest = -1
# 运行日志
UseLogFile = true
File = /var/run/hhvm.log
# 访问日志
Access {
* {
File = /var/run/hhvmaccess.log
Format = %h %l %u %t "%r" %>s %b
}
}
# 管理员管理日志
AdminLog {
File = /var/run/hhvm.admin.log
Format = %h %t %s %U
}
ApplicationLog = true
}
# 服务器选项
Server {
# 主机名
Host = www.king.com
IP = 172.16.251.41
Port = 80
# 线程总数 并发数量 (重要)
ThreadCount = 50
# 欲解释的php项目目录 ( 重要 )
SourceRoot = /var/www/php/
# 请求超时不限 请求内存不限
RequestTimeoutSeconds = -1
RequestMemoryMaxBytes = -1
# 启动服务选项 默认页 错误页 错误内容
DefaultDocument = index.php
ErrorDocument404 = 404.php
FatalErrorMessage = sorry , error
# http设置 压缩 长连接 http协议栈大小 响应队列长度
GzipCompressionLevel = 3
EnableKeepAlive = true
EnableEarlyFlush = true
MaxPostSize = 8 # in MB
ResponseQueueCount = 0
# 连接潮湿
ConnectionTimeoutSeconds = 60
}
# 管理地址
AdminServer {
Port = 8088
ThreadCount = 1
Password =
}
# 测试页面
管理页面:
在此可以执行多种hhvm的管理命令(对应url即可)
测试:
初探阶段我们使用最为简单的ab测试完成,后面可以进行更加精确的测试项目来完成
图: 默认情况未优化任何参数的情况如下
# 机器情况 cpu 1.3ghz , memory 1G 虚拟机环境
# 测试页面为 phpMyadmin 4
ab -c 100 -n 10000 http://172.16.251.41/
纯脚本执行环境压力值一致情况 ( 该php页面非常简单只书写了一个 phpinfo() 探针函数 )
思考:
纯php或者内容量少的情况下,响应无比快,那大家或许猜到了瓶颈,看图
上图清晰明确指出了性能所在,这便是下节我们要解决的一些问题
注意这里都是无缓存的,并且每一次的请求都要重新生成
静态文件缓存,php代码缓存等等