PHP 7.0 安装使用与性能监测!

PHP 7.0发布,网上关于新版的介绍不少,介于 7.0 在正式发布以前已经发过若干个 Beta、8个 RC,应该不会出现重大问题。今日我将一台机器升级至 PHP 7.0 并将有关信息记录以下。php

本人使用 Ubuntu 12.04 LTS,在网上已经找到 7.0 正式版的 ppa,因此不须要编译,使用以下命令可直接安装。html

安装 PHP7.0与扩展mysql

`sudo add-apt-repository ppa:ondrej/php-7.0
sudo apt-get update
sudo apt-get install php7.0-fpm php7.0-cli php7.0-common php7.0-json php7.0-mysql php7.0-opcache php7.0-curl
`
因为 Memcached、Redis 扩展并无在 pecl 发布支持 PHP7 的最新版本,因此须要到 Github 找到 PHP7 的分支进行手动编译安装。git

redis、memcached的github地址以下
https://github.com/phpredis/phpredis/
https://github.com/rlerdorf/php-memcachedgithub

Redis 安装方法web

`git clone https://github.com/phpredis/phpredis/
cd phpredis
git checkout php7
phpize
./configure
make
ssudo make install`redis

Memcached 安装方法sql

Memcached 须要先下载 libmemecached 库才能正常编译。数据库

`wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
sudo make install
sudo apt-get install pkg-config
git clone https://github.com/rlerdorf/php-memcached.git
cd php-memcached
git checkout php7
phpize
./configure
make
sudo make install`json

本身编译的这2个扩展须要手动在配置文件里加载

`sudo touch /etc/php/mods-available/redis.ini
sudo touch /etc/php/mods-available/memcached.ini`

并将两个文件内容写上

`extension=redis.so
extension=memcached.so`
`cd /etc/php/7.0/fpm/conf.d
sudo ln -s /etc/php/mods-available/redis.ini ./
sudo ln -s /etc/php/mods-available/memcached.ini ./`

若是命令行下须要启用扩展,一样须要在 cli/conf.d 目录下将其连接过去。
最后重启服务器

sudo service php7.0-fpm restart

配置文件的调整
因为 PHP7.0 最大的改进是性能,因此务必要启用 opcache 保证其能发挥最大做用。
将 php.ini 的以下配置启用。

`opcache.enable=1
opcache.enable_cli=1
opcache.file_cache=/tmp
opcache.error_log=/var/log/opcache_errors.log`

ppa 安装的包默认 error_display 是 off 的。 并且 error_log 是注释的,意味着出现问题时查看不到任何信息。
所以请写入以下配置

`error_log=/var/log/php_errors.log
sudo chown www-data.www-data /var/log/php_errors.log`

本人安装的是 Nginx 服务器,请确保用户数组更改成与本身 webserver 同样的,不然仍是不会出现任何提示。 opcache_errors.log 文件一样如此。

关于 opcache 的更多内容能够访问这里查看 http://www.laruence.com/2015/12/04/3086.html

异常处理与解决

在配置完成后,就须要实际的将程序跑一下了。目前将老系统转移到 EN PHP7.0 后,第一个错误就是

09-Dec-2015 12:27:48 Asia/Chongqing] PHP Fatal error: Uncaught Error: Call to undefined function set_magic_quotes_runtime() in /init.php:46

已经再也不存在set_magic_quotes_runtime 这个函数了。若是要兼容的话须要加上判断

`if(PHP_VERSION_ID < 70000){

set_magic_quotes_runtime();

}`

监控与调优

我在系统里安装了 OneAPM 提供的 Agent。这样能够实时监测到整个系统的运行状况。其余版本的 Agent 官方网站已经提供了下载。截止本文落笔,PHP 7.0版本官方提供了一个下载地址是:https://oneapm.kf5.com/attachments/download/366552/0015667f0036f47c827fcb8fcbfbc79/| 36a06faeaa79de1947abf8380221dde13 |

在这以前更多人会使用 xhprof 来检测和优化系统,可是 xhprof 对总体的程序性能采集样本没法很好的概括,也没有很好的可视化曲线图和 Web 事务跟踪,致使在短期内很难对系统瓶颈进行评估。

因此我使用 OneAPM 的 PHP Agent 来完成这些工做,OneAPM 一样使用定时采样定时汇报的方式来收集性能信息,而且官方宣称耗费资源小于5%。不过对于使用性能提高数倍的 PHP7.0 来部署的话这些损耗能够忽略不计,并且本人只在集群若干机器内部署了一台。

下面介绍基本的性能分析和故常排查方法。

PHP 7.0 安装使用与性能监测!

好比能够在 dashboard 中查看到具体某个时间段整个系统的稳定程度,咱们在图上看到了一个异常波峰,时间在早上6点左右,经过列表筛选器移除 WEB External 后看图。

PHP 7.0 安装使用与性能监测!

其余业务都很正常,执行到最后 PHP 层,平均时间也只用了 10ms 左右。回到上图点击波峰的指示器能够看到具体明细。

当打开详情时能够明显看到,原来是微信的接口在6点钟抽了。一样该页面还能够监控到第三方服务调用的响应状况。好比 217ms 的 api.hitokoto.us 服务。

再简单看一个 SQL 缓慢的监控。

PHP 7.0 安装使用与性能监测!

经过 Web 事务的响应时间占比查看到一个脚本执行时间相对过长,经过上图能够看到数据库查询占了579ms

PHP 7.0 安装使用与性能监测!

经过切换到详情页面,能够看到整个脚本的调用过程,最终发现是程序 <span class="s1">mysqli.php:88 行执行的查询占用了过长的时间。</span>

以上只是经过 OneAPM 持续检查程序稳定性的一个基本方法。

程序在平常运行中因为受到的访问量不一样,颇有可能在某个时间点上出现大面积的延迟,好比并发忽然增高或访问某一部分接口的比例忽然太高,而平时 Apdex 指标却看起来很是漂亮,那么这个时候经过 OneAPM 就很容易发现程序中影响性能的部分,从而继续改进或优化代码。

(本文做者系 OneAPM 用户,受权 OneAPM 官方博客转发)

**OneAPM for PHP 可以深刻到全部 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。想阅读更多技术文章,请访问 OneAPM 官方技术博客
。**
本文转自 OneAPM 官方博客

相关文章
相关标签/搜索