前段时间给自己的服务器做压力测试,发现抗压能力很差,一打就死,其原因是PHP的编译程序占用太多,便想优化PHP,在代码层次上是无法做优化,只能在程序本身做优化,查了一下资料基本上都是编译做缓存,都是缓存到内存里面,其实使用PHP8的JIT会强,但为了稳定性暂时不使用。
PHP–OpCache组件
在早期的时候,PHP的APC在PHP5.4及以下版本是性能最好的代码缓存。不过PHP升级到5.5及以上后,APC不再有效。需要使用Zend的OpCache扩展。PHP 5.5已经集成Zend Opcache功能缓存速度比APC、eAccelerator、XCache更快。我的是PHP7以上,使用OpCache给自己优化程序。
基本上现在大多数上的技术,不涉及本身基本上都是缓存到内存中(DDR4内存读写速度大概50G每秒),如果操作系统装到内存里面速度肯定飞起。
PHP7的版本OpCache默认是自带的但没有启用,需要到PHP安装目录下面找到 php.ini 这个文件,该文件是管理PHP的所有扩展程序,PHP是脚本解释语言,其OpCache原理将编译过的代码缓存到内存中,下次调用时直接从缓存读取。
进入php.ini,以下是解释说明,该符号“;”代表着注释:
(注意在opcache添加zend_extension=opcache,这是代表文件位置,默认情况下在安装PHP目录下的ext文件中,php_opcache.dll 这个就是)
[opcache]
zend_extension=opcache
;启用操作码缓存。如果禁用此选项,则不会优化和缓存代码
opcache.enable=1
;仅针对 CLI 版本的 PHP 启用操作码缓存。 通常被用来测试和调试
opcache.enable_cli=1
;OPcache 的共享内存大小,以兆字节为单位
opcache.memory_consumption=256
;用来存储预留字符串的内存大小,以兆字节为单位。 PHP 5.3.0 之前的版本会忽略此配置指令
opcache.interned_strings_buffer=16
;OPcache 哈希表中可存储的脚本文件数量上限。设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000
opcache.max_accelerated_files=1000000
;如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新
opcache.validate_timestamps=1
;检查脚本时间戳是否有更新的周期,以秒为单位。 设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新。如果 opcache.validate_timestamps 配置指令设置为禁用,那么此设置项将会被忽略
opcache.revalidate_freq=60
;如果启用,则会使用快速停止续发事件。 所谓快速停止续发事件是指依赖 Zend 引擎的内存管理模块 一次释放全部请求变量的内存,而不是依次释放每一个已分配的内存块。从 PHP 7.2.0 开始,此配置指令被移除。 快速停止的续发事件的处理已经集成到 PHP 中, 只要有可能,PHP 会自动处理这些续发事件
opcache.fast_shutdown=1
配置完成需要重启PHP,运行 php -m 查看启用的组件或通过 phpinfo(); 的方式
如果我的是使用集成化,刚好支持: