您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/4/15 10:29:25发布15次查看
php 7.0发布,网上关于新版的介绍很多,介于 7.0 在正式发布之前已经发过若干个 beta、8个 rc,应该不会出现重大问题。今日我将一台机器升级至 php 7.0 并将有关信息记录如下。 本人使用 ubuntu 12.04 lts,在网上已经找到 7.0 正式版的 ppa,所以不需要编译,使用如下命令可直接安装。
安装 php7.0与扩展 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 的分支进行手动编译安装。
redis、memcached的github地址如下
https://github.com/phpredis/phpredis/ https://github.com/rlerdorf/php-memcached redis 安装方法 git clone https://github.com/phpredis/phpredis/ cd phpredis
git checkout php7
phpize
./configure make
ssudo make install
memcached 安装方法 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
自己编译的这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/
在这之前更多人会使用 xhprof 来检测和优化系统,但是 xhprof 对整体的程序性能采集样本无法很好的归纳,也没有很好的可视化曲线图和 web 事务跟踪,导致在短时间内很难对系统瓶颈进行评估。
所以我使用 oneapm 的 php agent 来完成这些工作,oneapm 同样使用定时采样定时汇报的方式来收集性能信息,并且官方宣称耗费资源小于5%。不过对于使用性能提升数倍的 php7.0 来部署的话这些损耗可以忽略不计,而且本人只在集群若干机器内部署了一台。
下面介绍基本的性能分析和故常排查方法。
比如可以在 dashboard 中查看到具体某个时间段整个系统的稳定程度,我们在图上看到了一个异常波峰,时间在早上6点左右,通过列表筛选器移除 web external 后看图。
其他业务都很正常,执行到最后 php 层,平均时间也只用了 10ms 左右。回到上图点击波峰的指示器可以看到具体明细。
当打开详情时可以明显看到,原来是微信的接口在6点钟抽了。同样该页面还可以监控到第三方服务调用的响应情况。比如 217ms 的 api.hitokoto.us 服务。
再简单看一个 sql 缓慢的监控。
通过 web 事务的响应时间占比查看到一个脚本执行时间相对过长,通过上图可以看到数据库查询占了579ms
通过切换到详情页面,可以看到整个脚本的调用过程,最终发现是程序 mysqli.php:88 行执行的查询占用了过长的时间。
以上只是通过 oneapm 持续检查程序稳定性的一个基本方法。
程序在日常运行中由于受到的访问量不同,很有可能在某个时间点上出现大面积的延迟,比如并发突然增高或访问某一部分接口的比例突然过高,而平时apdex 指标却看起来非常漂亮,那么这个时候通过 oneapm 就很容易发现程序中影响性能的部分,从而继续改进或优化代码。
(本文作者系 oneapm 用户,授权 oneapm 官方博客转发) oneapm for php 能够深入到所有 php 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。想阅读更多技术文章,请访问 oneapm官方技术博客 。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product