首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >低成本高收益的PHP性能提升方案

低成本高收益的PHP性能提升方案

原创
作者头像
Jayjiao
修改2018-08-29 14:19:05
5280
修改2018-08-29 14:19:05
举报

| 导语开启opcache提升PHP性能

介绍

OPcache通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。 PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 PECL 扩展中的 OPcache 库。

opcahe这个扩展不是默认开启的,很容易被大家遗忘,如果你想继续提升你PHP系统的性能,在实践代码优化,分布式,轻重分离,缓存等等之后,恰好又忘记了开启opcahe,那么恭喜你,它一定会给你惊喜的。

或者你还什么都没做,想快速提升系统性能,那就更合适了

安装

如果你使用的就是PHP7,并且在编译的时候就开启了opcache --enable-opcache 可以通过phpinfo查看,后面所需要用到的各种路径也可以通过phpinfo来查看,比果你不知道你的PHP安装目录,配置文件所在的目录。

那你可以直接转到第三步开启opcache,如果没有则需要通过源码进行编译,过程也很简单

编译过程

0.先找到你安装的php的源码(留着源码还是很重要的,PHP的官方扩展都在里面),如果源码找不到了也可以通过php -v来获取版本号去官网下载

[root@centos7 opcache]# php -v
PHP 7.2.1 (cli) (built: Feb  9 2018 11:49:02) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
[root@centos7 opcache]# pwd
/data/src/lnmp1.3-full/src/php-7.2.1/ext/opcache
[root@centos7 opcache]#

1.使用phpize生成configure文件,为编译做准备,这里的phpize在你安装好的php的目录下,如/usr/local/php/bin/phpize

[root@centos7 opcache]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718

 2.生成makefile ./configure --with-php-config=/usr/local/php/bin/php-config 这个参数很重要,如果你的php不是安装到默认位置,这里就得指定php-config所在的位置

3.直接make && make install,几秒钟之后编译好的so就会出现在php的扩展目录中

[root@centos7 opcache]# cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
[root@centos7 no-debug-non-zts-20170718]# ll
总用量 11556
-rwxr-xr-x 1 root root 3552344 2月   9 2018 opcache.a
-rwxr-xr-x 1 root root 1955840 2月   9 2018 opcache.so
-rwxr-xr-x 1 root root 1812360 3月   8 16:27 redis.so
-rwxr-xr-x 1 root root 4502352 3月   8 11:01 swoole.so

 如果看到opcache.so那就恭喜你,编译完成了

4.修改php.ini,这个在/usr/local/php/,如果没有指定安装目录则在/etc目录下,通过修改配置文件开启opcache功能,修改完配置文件后需要重启

1.nginx+php-fpm的形式只需要重启php-fpm即可

2.apache的模式下需要重启apache

[Zend Opcache]
#加载编译好的so
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/opcache.so
opcache.memory_consumption=64  #为opcache分配多少共享内存,单位M
opcache.interned_strings_buffer=8 #nterned string的内存大小
opcache.max_accelerated_files=4000 #最大缓存的文件数目。 实际上这个值会使用第一个大于你配置的数字的下列素数 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 }, 如你将该值指定为400,则实际上该值为463.
opcache.force_restart_timeout=180 #如果opcache处于非active状态,当N秒后opcache将自动重启
opcache.revalidate_freq=60 #opcache自动检测文件是否更新的周期,单位秒。 如果是0,则每次请求时opcache都要进行检测。 当validate_timestamps为0时,本指令无效。
opcache.fast_shutdown=1 #是否打开快速关闭, 打开时可使php在request shutdown时回收内存快
opcache.enable_cli=1 #是否在CLI(即命令行时)启用opcache

 这里只罗列了常用的部分参数,所有参数提供一个链接,有兴趣的可以研究一下https://blog.csdn.net/bly1126/article/details/19077853

重启完之后可以通过php-fpm -m 或者php -m 来查看是否加载成功

[Zend Modules]
Zend OPcache

 到此为止你的PHP就开启强大的opcache功能,就PHP7而已,一般性能能达到5-10倍的提升

这里简单介绍下配合,腾讯云1C1G CVM 数据库mysql5.5.56本机安装,PHP7.2.1,wordpress4.9.8,使用ab压测,参数 ab -c 10 -n 100 https 跑wordpress首页

开启之前

Server Software:        nginx
Server Hostname:        马赛克
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /
Document Length:        53027 bytes

Concurrency Level:      100
Time taken for tests:   9.358 seconds
Complete requests:      25
Failed requests:        0
Write errors:           0
Total transferred:      1331800 bytes
HTML transferred:       1325675 bytes
Requests per second:    2.67 [#/sec] (mean)
Time per request:       37431.768 [ms] (mean)
Time per request:       374.318 [ms] (mean, across all concurrent requests)
Transfer rate:          138.98 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      156  192   7.7    194     196
Processing:  1255 4178 618.8   4279    4592
Waiting:     1194 4115 618.2   4216    4526
Total:       1411 4370 626.2   4474    4784

开启之后

Server Software:        nginx
Server Hostname:        马赛克
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128

Document Path:          /
Document Length:        53027 bytes

Concurrency Level:      100
Time taken for tests:   26.933 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      53272000 bytes
HTML transferred:       53027000 bytes
Requests per second:    37.13 [#/sec] (mean)
Time per request:       2693.324 [ms] (mean)
Time per request:       26.933 [ms] (mean, across all concurrent requests)
Transfer rate:          1931.57 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      111  145  39.6    134     293
Processing:   151 2427 402.0   2414    3418
Waiting:       73 2360 401.1   2344    3358
Total:        277 2573 390.1   2549    3658

 性能提升还是很显著。和在网上收集的信息基本一致(请忽略这很挫的数据,本来配置就不高,而且数据库等等都装在一起,空跑hello world 1000qps也没什么意思),其实,按照opcache的原理来看,越是复杂的代码性能提升越是明显,从实验结果也验证了这个原理

Server Software:        nginx
Server Hostname:        马赛克
Server Port:            80

Document Path:          /test.php
Document Length:        12 bytes

Concurrency Level:      100
Time taken for tests:   0.895 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      190000 bytes
HTML transferred:       12000 bytes
Requests per second:    1117.90 [#/sec] (mean)
Time per request:       89.454 [ms] (mean)
Time per request:       0.895 [ms] (mean, across all concurrent requests)
Transfer rate:          207.42 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       35   38   1.7     37      44
Processing:    36   41   4.7     40      58
Waiting:       36   41   4.7     39      58
Total:         71   79   5.5     77      98

 总结:

PHP作为一个解释语言,相比编译型语言运行效率确实是一个短板,但是开启opcache可以减小这一差距,而且不需要程序员做任何代码的修改,可以说是零成本,高收益,推荐在生产环境保持开启,来提升系统的性能。当然如果是在本地开发的时候建议关闭,因为会造成修改完的代码不会马上生效,造成在开发时的不必要的麻烦。

PHP的优势在于学习门槛低,开发效率高,况且PHP7作为最新版本的,已经显著提升了性能,在项目的初期优势非常明显,等度过了初期的后续是继续优化PHP架构,还是换成运行更快的语言如Go就看各位具体项目的情况了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 安装
  • 编译过程
  •  总结:
相关产品与服务
网站建设
网站建设(Website Design Service,WDS),是帮助您快速搭建企业网站的服务。通过自助模板建站工具及专业设计服务,无需了解代码技术,即可自由拖拽模块,可视化完成网站管理。全功能管理后台操作方便,一次更新,数据多端同步,省时省心。使用网站建设服务,您无需维持技术和设计师团队,即可快速实现网站上线,达到企业数字化转型的目的。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档