2016年10月11日,距离我把博客服务器从PHP 5.6升级到PHP 7,正好半年了。
这半年里,PHP 7运行稳定,没有出过大问题。今天,就来分享一下升级PHP 7之后的真实性能数据。
一、为什么要升级PHP 7
PHP 7是2015年12月发布的,是PHP的一个重大版本升级。它的核心是全新的Zend Engine 3,性能比PHP 5.6有了巨大的提升。
官方宣称,PHP 7的性能比PHP 5.6提升了2倍,内存占用降低了50%。很多基准测试也显示,PHP 7在各种场景下的性能,都比PHP 5.6有显著提升,甚至在某些场景下能和HHVM媲美。
我升级PHP 7的原因,主要有几个:
- 性能提升:博客虽然流量不大,但是性能提升总是好的,响应更快,用户体验更好
- 内存占用降低:服务器内存有限,内存占用降低了,可以省出更多内存给其他服务
- 新特性:PHP 7引入了很多新特性,比如标量类型声明、返回类型声明、匿名类、null合并运算符等,写代码更方便
- 长期支持:PHP 5.6的官方支持到2018年底,PHP 7的支持时间更长,早点升级早点受益
当然,升级之前,我也做了很多调研,看了很多基准测试。但是那些都是实验室数据,真实环境下的表现怎么样?我心里也没底。
二、升级前的准备
升级之前,我做了充分的准备:
1. 代码兼容性检查 PHP 7有一些不兼容的改动,比如移除了一些旧的扩展(mysql、ereg等),改变了一些函数的行为。我用PHP 7的兼容性检查工具(php7cc)扫描了我的代码,确认没有不兼容的地方。
我的博客代码比较简单,没有用那些被移除的扩展,所以兼容性没问题。
2. 本地测试 我在本地搭建了PHP 7的环境,把博客代码跑起来,测试了所有功能,确认没有问题。包括文章列表、文章详情、搜索、后台管理等,都测试了一遍。
3. 备份 升级之前,我备份了服务器上的所有数据,包括代码、数据库、配置文件。万一升级出问题,可以快速回滚。
4. 选择升级时间 我选择在凌晨流量低的时候升级,减少对用户的影响。
三、升级过程
升级过程其实很简单:
- 卸载PHP 5.6
- 安装PHP 7和相关扩展
- 修改Nginx配置,指向PHP 7的socket
- 重启Nginx和PHP-FPM
- 测试功能
整个过程,不到半小时就完成了。升级之后,博客正常运行,没有出问题。
当然,这是因为我的博客比较简单,代码兼容性好。如果是复杂的项目,升级过程可能会遇到更多问题,需要更多的时间测试和调试。
四、遇到的坑
升级过程中,我也遇到了一些小问题:
1. 扩展兼容性 有些PHP扩展,在PHP 7刚发布的时候,还不支持PHP 7。比如,我用的一个缓存扩展,升级的时候发现还没有PHP 7的版本。后来,我换了一个支持PHP 7的替代扩展,才解决了这个问题。
现在,PHP 7已经发布半年多了,大部分常用扩展都已经支持PHP 7了,这个问题应该不大了。
2. 配置文件变化 PHP 7的php.ini配置文件,和PHP 5.6有一些变化。有些配置项被移除了,有些配置项的默认值变了。升级的时候,我没有直接用PHP 5.6的php.ini,而是用PHP 7的默认php.ini,然后根据需要修改配置项。
这样做虽然麻烦一点,但是能避免因为配置项变化导致的问题。
3. OPcache配置 PHP 7的OPcache,和PHP 5.6的也有一些变化。升级之后,我调整了OPcache的配置,包括内存大小、缓存数量、验证频率等,让它更适合PHP 7。
调整之后,OPcache的命中率更高了,性能也更好了。
五、真实性能数据
升级半年了,我收集了一些真实环境下的性能数据,和PHP 5.6的时候做个对比。
1. 响应时间
这是最直观的指标。我对比了升级前后,博客首页的平均响应时间:
- PHP 5.6:平均响应时间约 320ms
- PHP 7:平均响应时间约 145ms
性能提升了约 55%,响应时间几乎减半。
这个数据,是在相同的服务器配置、相同的流量、相同的代码下测的。虽然博客流量不大,但是提升还是很明显的。
2. 内存占用
PHP-FPM进程的平均内存占用:
- PHP 5.6:每个进程平均占用约 85MB
- PHP 7:每个进程平均占用约 42MB
内存占用降低了约 50%,和官方宣称的一致。
内存占用降低了,意味着相同的内存,可以跑更多的PHP-FPM进程,并发能力更强。以前,我的服务器内存只能跑10个PHP-FPM进程,现在可以跑20个,并发能力提升了一倍。
3. CPU使用率
在相同的流量下,CPU的平均使用率:
- PHP 5.6:CPU平均使用率约 45%
- PHP 7:CPU平均使用率约 22%
CPU使用率降低了约 50%。这意味着,服务器可以承受更高的流量,而不会因为CPU满了而变慢。
4. 并发能力
我用ab(Apache Bench)做了一个简单的并发测试,1000个请求,100个并发:
- PHP 5.6:每秒请求数(QPS)约 85,平均响应时间约 1176ms
- PHP 7:每秒请求数(QPS)约 180,平均响应时间约 555ms
并发能力提升了约 112%,QPS翻了一倍多。
这个测试是在我的小服务器上做的,配置不高。如果是配置更好的服务器,提升可能会更明显。
5. 数据库查询
PHP 7对数据库查询的性能,也有提升。我对比了一个复杂的数据库查询页面的响应时间:
- PHP 5.6:平均响应时间约 480ms
- PHP 7:平均响应时间约 210ms
性能提升了约 56%。
六、性能提升的原因
PHP 7的性能提升,主要来自以下几个方面:
1. 全新的Zend Engine 3 PHP 7的核心是全新的Zend Engine 3,对内部数据结构做了大量优化,很多操作的性能都有显著提升。
2. 更高效的内存管理 PHP 7的内存管理更高效,减少了内存分配和释放的开销,也降低了内存占用。
3. AST(抽象语法树) PHP 7引入了AST,在编译阶段,先把PHP代码解析成AST,再编译成opcode。这样,编译过程更清晰,也更容易优化。
4. 更多的优化 PHP 7在很多细节上都做了优化,比如函数调用、变量访问、字符串操作等,这些小优化加起来,带来了整体性能的提升。
七、升级的建议
根据我这半年的使用经验,给想升级PHP 7的朋友几个建议:
1. 一定要升级 如果你还在用PHP 5.6,我的建议是:一定要升级到PHP 7。性能提升太明显了,响应时间减半,内存占用减半,并发能力翻倍。这么大的提升,不需要改代码,只需要升级PHP版本,太划算了。
2. 做好兼容性检查 升级之前,一定要做好代码兼容性检查。用php7cc等工具扫描代码,确认没有不兼容的地方。特别是那些用了旧扩展(mysql、ereg等)的项目,一定要先替换成新的扩展(mysqli、pdo等)。
3. 先在测试环境测试 不要直接在生产环境升级。先在测试环境搭建PHP 7,把代码跑起来,测试所有功能,确认没有问题,再在生产环境升级。
4. 做好备份 升级之前,一定要备份好数据和配置。万一升级出问题,可以快速回滚,减少损失。
5. 选择低峰期升级 选择在流量低的时候升级,减少对用户的影响。
6. 升级后监控 升级之后,要密切监控服务器的性能和错误日志,及时发现和解决问题。
八、写在最后
PHP 7升级半年:性能提升了多少?真实数据分享。
半年的使用体验告诉我,PHP 7确实是一个巨大的进步。性能提升明显,运行稳定,新特性实用。如果你还在用PHP 5.6,我强烈建议你升级到PHP 7。
当然,升级之前,一定要做好兼容性检查和测试,确保代码能在PHP 7上正常运行。
这半年里,我的博客运行稳定,没有因为PHP 7出过问题。响应更快了,内存占用更低了,服务器能承受更高的流量了。这些都是实实在在的好处。
PHP 7,值得升级。
最后,用一句话总结:
"PHP 7,不只是版本号的升级,更是性能的飞跃。"
希望这篇文章,能给想升级PHP 7的朋友一些参考。如果有什么问题,欢迎在评论区留言,我们一起讨论。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录