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

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 官方技术博客

本文转自 OneAPM 官方博客

时间: 2024-09-01 14:03:25

PHP 7.0 安装使用与性能监测!的相关文章

pyDash:一个基于 web 的 Linux 性能监测工具

pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart.js 来写的.经测试,在下面这些主流 Linux 发行版上可运行:CentOS.Fedora.Ubuntu.Debian.Raspbian 以及 Pidora . 你可以使用这个工具来监视你的 Linux 个人电脑/服务器资源,比如 CPU.内存.网络统计,包括在线用户的进程以及更多.仪表盘完全由主要的 Python 发行版本所提供的 Python 库开发,因此它的依赖

PHP性能监测的工具介绍 - XHProf

XHProf 这个软件本是Facebook内部的一个应用工具,2009年3月份开源,为PHP的性能监测提供了很好的工具.官方的介绍中提到: XHProf is a hierarchical profiler for PHP. It reports function-level call counts and inclusive and exclusive metrics such as wall (elapsed) time, CPU time and memory usage. XHProf'

mysql5.0安装配置问题集

Mysql是一个多线程的,结构化查询语言(SQL)数据库服务器.SQL 在世界上是最流行的数据库语言.MySQL 的执行性能非常高,运行速度非常快,并非常容易使用.是一个非常棒的数据库.新的版本可以作为复杂情况以及大负荷数据库解决方案的平台.在新版本中,包含了以下一些新特性:嵌入式MySQL 服务器库让把MySQL 服务器嵌入到第三方的软件和解决方案当中变得更加容易安全连接采用Secure Sockets Layer (SSL) 提高了速度,加强了与其他 DBMS和SQL 标准的兼容性. 您可以

大型网站性能监测、分析与优化常见问题Q&A

大型网站性能监测.分析与优化常见问题Q&A @tanwen110 (唐文),曾负责腾讯四大平台之一网络媒体平台的整体运维.运营规划工作:曾任百度T7架构师和百度性能优化TOPIC.百度UAQ.APM平台负责人:畅销书<海量运维.运营规划之道>作者: mmTrix创始人,后并入上市公司高升控股(000971.SZ),出任技术VP. 购买链接:http://item.jd.com/11962556.html Q:基于rest的微服务,有什么好的监控方案推荐的,最好是对系统影响最小的 A:自

Linux 性能监测:IO

磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴.寻轨等.访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样.要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的. 内存页 上一篇 Linux 性能监测:Memory 提到了内存和硬盘之间的 IO 是以页为单位来进行的,在 Linux 系统上1页的大小为 4K.可以用以下命令查看系统默认的页

Linux 性能监测:介绍

看了某某教程.读了某某手册,按照要求改改某某设置.系统设定.内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统.不同的硬件.不同的应用优化的重点也不同.优化的方法也不同.优化的参数也不同.性能监测是系统优化过程中重要的一环,如果没有监测.不清楚性能瓶颈在哪里,优化

IIS 6.0 安装与网站架设教程[图文]_win服务器

IIS 6.0网站架设 IIS是微软推出的一套架设WEB.FTP.SMTP服务器的整合系统组件,主要捆绑在微软的Windows 2003等服务器操作系统中.Windows 2003不仅集成有IIS 6.0,而且还带有一个web版本,专门用于web服务的各种web接口应用,功能极其完美. 一.IIS 6.0概述 IIS 6.0包含在Windows Server 2003服务器的四种版本之中:数据中心版.企业版.标准版和Web版.另外,再说一个最常见的IIS 6.0问题:IIS 6.0不能在Wind

linux下CentOS6.0安装配置图文教程

1.1 系统简介 CentOS 是什么? CentOS是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本.每个版本的 CentOS 都会获得七年的支持(通过安全更新方式).新版本的 CentOS 每两年发行一次,而每个版本的 CentOS 会定期(大概每六个月)更新一次,以便支持新的硬件.这样,建立一个安全.低维护.稳定.高预测性.高重复性的 Linux 环境. CentOS(Community Enterprise Operating Syst

SQLServer 2012异常问题(二)--由安装介质引发性能问题

原文:SQLServer 2012异常问题(二)--由安装介质引发性能问题 问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后发现性能明显下降,应用写入.读取性能下降的比较厉害:   向微软寻求帮助后得出答案,原来这与SQLSERVER的安装介质有关. 大致意思是说由于NUMA架构可以自行管理内存池,在安装了CAL的EE后,由于限制只能使用20个cores,同样内存则只能管理到20个cores涉及到的NUMA的对应的内存空