0


php7.4生产环境压力测试CPU占用100%解决方案

最近开发了一个项目,客户要求压力测试,测试时发现并发量大时php-fpm占用cpu一直100%,调整了php的最大进程数pm.max_children,优化了程序效果不明显。后面使用了opcache,cpu使用率一下降到20%左右。

什么是opcache?下面是百度:

Opcache 的前生是

Optimizer+

,它是PHP的官方公司 Zend 开发的一款闭源但可以免费使用的 PHP 优化加速组件。

官网介绍:

OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。

PHP 5.5.0 及后续版本中已经绑定了 OPcache 扩展。 对于 PHP 5.2,5.3 和 5.4 版本可以使用 » PECL 扩展中的 OPcache 库。

PHP的正常执行流程如下:

request请求(nginx,apache,cli等)-->Zend引擎读取.php文件-->扫描其词典和表达式 -->解析文件-->创建要执行的计算机代码(称为Opcode)-->最后执行Opcode--> response 返回。

如上图,启用opcache之前,每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重新生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快。

启用Opcode缓存之后的流程图如下所示:

Opcode cache 的目地是避免重复编译,减少 CPU 和内存开销。

那要如果配置Opcode?php7.4自带就有,我是在php.ini加上如下配置

zend_extension=opcache.so

opcache.enable=1

opcache.use_cwd=1

opcache.enable_cli=1

opcache.save_comments=1

opcache.huge_code_pages=1

opcache.memory_consumption=512

opcache.max_wasted_percentage=5

opcache.interned_strings_buffer=16

opcache.max_accelerated_files=40960

opcache.validate_timestamps=0

opcache.force_restart_timeout=180

opcache.error_log=/u01/log/php/opcache.log

opcache.log_verbosity_level=1


本文转载自: https://blog.csdn.net/nightstar84/article/details/131127961
版权归原作者 叫我星爷 所有, 如有侵权,请联系我们删除。

“php7.4生产环境压力测试CPU占用100%解决方案”的评论:

还没有评论