@lgh-dev
2017-12-06T06:58:27.000000Z
字数 6654
阅读 920
PHP
分析应用的性,
1、基准性能测试工具
Apache Bench(http://bit.ly/apache-bench)和Siege(http://www.joedog.org/siege-home/),找出性能问题。基准测试工具的作用是从外部测试性能,比如测试同时有多少用户和多少请求访问应用中制定的URL。测试结束后,测试工具会告诉你每秒能承受多少请求。如果性能问题不明显,就要使用分析器。
2、分析器的种类:
分析器分两类,一种在开发环境中使用,一种在生产环境中使用。
Xdebug
分析结果显示工具:KCacheGrind(http://kcachegrined.sourceforge.net/) 和 WinCacheGrind(http://sourceforge.net/projects/wincachegrind/)是两个不错的选择。
Xdebug
是最流行的PHP分析器之一,使用它分析应用的调用堆栈,能轻易找出瓶颈和性能问题。尽量把分析器的生成结果保存在PHP应用的最顶层目录中。这样在开发的过程中便于找到并查看分析结果。
XHProf
是个比较新的PHP应用分析器,由FaceBook开发,在开发环境和生产环境中都能使用。他搜集的信息不如Xdebug多,不过消耗的系统资源比较少,适合再生产环境中使用。
安装XHProf,添加如下配置
extension=xhprof.so
extension=mongo.so
到PHP的php.ini的配置文件中。
XHProf和XHGUI结合在一起使用效果最好。XHGUI是facebook为XHProf开发的配套的Web应用。用于查看XHProf的分析结果。XHGUI是使用PHP开发的.
更多的PHP分析知识:
http://www.sitepoint.com/the-need-for-speed-profiling-with-xhprof-and-xhgui/
https://blog.engineyard.com/2014/profiling-with-xhprof-xhgui-part-1
https://blog.engineyard.com/2014/profiling-with-xhprof-xhgui-part-2
https://blog.engineyard.com/2014/profiling-with-xhprof-xhgui-part-3
1、HHVM 全称是Hip Hop Virtual Machine ,是一种PHP的引擎,HHVM的即时编译器性能比PHP-FPM好很多倍。
2、Hack是一种新的服务端语言,在PHP语言的基础上修改而来。Hack基本上兼容PHP代码,不过扩展了PHP的语言,增加了一些特性:严格类型,新的数据结构和实时类型检查服务器。
3、PHP是传统意义上的解释性语言,在命令行或Web服务器调用的解释器解释PHP代码之前,PHP代码就是PHP代码。PHP解释器会解释PHP脚本,把代码转换成一系列Zend操作码(机器码指令),再把这些操作码交给Zend Engine执行。
解释性语言比编译性语言慢很多,因为每次执行的时候都要将解释性语言转为机器码,消耗了额外的系统资源。
4、HHVM先把PHP代码转换为一种字节码中间格式,而且会缓存转换得到的字节码,然后用JIT编译器转换并优化缓存的字节码,将其变为x86_64机器码。HHVM的JIT编译器提供了很多底层性能优化措施,而且只有当Web服务器请求PHP脚本时,HHVM才会即时把字节码编译成机器码。
5、HHVM不适合所有人使用,提升性能有更容易的方式,例如减少请求数,优化数据库查询等,都能提升应用的性能,减少响应时间。应该先考虑从本身优化,在考虑外部优化。
6、HHVM参考资源:
- 扩展 [http://bit.ly/fb-extensns],查看HHVM兼容的扩展。
- 框架的等价性(http://hhvm.com/frameworks/), 追踪HHVM对流行框架的兼容性
- 问题追踪平台(http://bit.ly/fb-hhvm),追踪为解决的HHVM问题。
- 常见问题(https://github.com/facebook/hhvm/wiki/FAQ)
- 博客(http://hhvm.com/blog)
hhvm.server.type=fastcgi
,让HHVM作为FastCGI服务运行。hhvm -c /etc/hhvm/php.ini my-script.php
/etc/hhvm/php.ini
和/etc/hhvm/server.ini
两个文件都需要: hhvm -m server -c /etc/hhvm/php.ini -c /etc/hhvm/server.ini
[include] files=/etc/supersivor/conf.d/*.conf
,为每个被监控的应用创建配置文件。
command:Supervisord使用这个命令启动应用的进程;
autostart:这个设置让Supervisord进程启动时启动应用;
autorestart: 这个设置让Supervisord在程序崩溃时重启应用程序;
startretries: Supervisord认定程序进程崩溃之前尝试启动次数;
user: 拥有应用程序进程的用户。
sudo supervisorctl reread; sudo supervisorctl update;
,重新加载配置文件。$object->methodOne()->methodTwo();
sudo apt-get install python-software-properties
,这个命令安装包含add-apt-repository二进制文件的python-software-properties的包。sudo add-apt-repository ppa:ondrej/php5-5.6
这个命令会把PPA添加到Ubuntu的软件源列表中,下载这个PPA的GPG公钥,并将其添加到GPG的秘钥环中。GPG公钥的作用是让Ubuntu验证PPA中的包,确保在原始作者构建并签名之后没有被篡改。Ubuntu会缓存所有可用的软件,因此添加新的软件源之后,要刷新这个缓存,命令sudo apt-get update
sudo apt-get install php5-cli
sudo apt-get install php5-curl php5-gd php5-json php5-mcrpyt php5-mysqlnd
php -v
检测php是否安装成功,安装成功后输出php的版本信息。
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y --enablerepo=epel,remi,remi-php56 install php-cli
yum search php
,找到php扩展列表,按如下方式安装 sudo yum -y --enablerepo=epel,remi,remi-php56 install php5-curl php5-gd php5-json php5-mcrpyt php5-mysqlnd php-opcache php-pdo
php -v
检测php是否安装成功,安装成功后输出php的版本信息。ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
homebrew/dupes
仓库。这个仓库中已有软件的处方,不过版本比OSX自带的新,brew tap homebrew/dupes
命令。 brew tap homebrew/versions
brew tap homebrew/php
brew search php56
查询你需要安装的php56的处方扩展。