首页 » Web前端 » php春哥技巧_PHP7进级Opcache运用总结

php春哥技巧_PHP7进级Opcache运用总结

访客 2024-11-22 0

扫一扫用手机浏览

文章目录 [+]

opcache.enable=1

opcache.validate_timestamps=1

php春哥技巧_PHP7进级Opcache运用总结

opcache.revalidate_freq=1

php春哥技巧_PHP7进级Opcache运用总结
(图片来自网络侵删)

opcache.file_cache=/tmp

opcache.huge_code_pages=1

opcache.save_comments=0

opcache.max_accelerated_files=30000

huge_code_pages

在系统中开启HugePages, 然后开启Opcache的huge_code_pages,提升PHP7的性能。

$sudo sysctl vm.nr_hugepages=512

分配512个预留的大页内存:

$ cat /proc/meminfo | grep Huge

AnonHugePages: 106496 kB

HugePages_Total: 512

HugePages_Free: 504

HugePages_Rsvd: 27

HugePages_Surp: 0

Hugepagesize: 2048 kB

然后在php.ini中加入:

opcache.huge_code_pages=1

PHP会把自身的text段, 以及内存分配中的huge都采取大内存页来保存, 减少TLB miss, 从而提高性能.

file_cache

opcache.file_cache=/tmp

配置二级缓存目录并启用二级缓存。
启用二级缓存可以在 SHM 内存满了、做事看重启或者重置 SHM 的时候提高性能。
默认值为空字符串 “”,表示禁用基于文件的缓存。

save_comments

opcache.save_comments=0

可以根据项目情形设置。
如果禁用,脚本文件中的注释内容将不会被包含到操作码缓存文件, 这样可以有效减小优化后的文件体积。
禁用此配置指令可能会导致一些依赖注释或表明的 运用或框架无法正常事情, 比如: Doctrine, Zend Framework 2 以及 PHPUnit。

max_accelerated_files

OPcache 哈希表中可存储的脚本文件数量上限。
真实的取值是在质数凑集 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一个大于即是设置值的质数。
设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。
建议设置至少要大于项目文件总数。

慎用enable_cli=true

如果项目框架里有PHP_SAPI === 'cli'类似的判断,请不要开启enable_cli=true。
由于开启这个并且设置了file_cache,php-fpm和cli会共用file_cache,如果php-fpm先实行了,再用cli办法实行脚本,那么PHP_SAPI的返回并不是’cli’。
而且官方文档里明确写着:仅针对 CLI 版本的 PHP 启用操作码缓存, 常日被用来测试和调试。
总之,请慎用。

链接目录的坑

.

├── webroot -> releases/v1

└── releases

├── v1

│ ├── foo.php

│ └── config -> conf/v1

└── v2

├── foo.php

└── config -> conf/v2

webroot是nginx路由的根目录,本身是个链接目录,然后config作为配置又链接到conf目录。

这种链接构造的目录强烈不推举,由于这个会造成opcache不会刷新,紧张是由于 opcache 是通过 realpath cache 获取文件信息,即便软链接已经指向了新位置,但是如果 realpath cache 里还保存着旧数据的话,opcache 依然无法知道新代码的存在。
查阅干系资料并验证了如下办理方案:

重启PHP-FPM

修正NGINX配置,这样会有一定的IO花费

##修正前

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param DOCUMENT_ROOT $document_root;

##修正后

fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

fastcgi_param DOCUMENT_ROOT $realpath_root;

等待realpath cache自动刷新,php.ini默认刷新韶光是两分钟

realpath_cache_ttl = 120

opcache.revalidate_path=1 社区里谈论修正opcache.ini参数,经由验证不起浸染最完美的办理方案便是不用链接,比如说config链接,完备可以在发布的时候直接将conf的代码拷贝到对应的位置。
至于webroot根目录,完备可以弃用,直接配置nginx conf root=releases/v1即可。

安全漏洞

opcache.file_cache_only=0opcache.validate_timestamp=1谨慎地审查我们的代码,并检讨网站中是否存在文件上传漏洞这三点只管即便把稳,就可以避免一定的安全问题

Reference

http://php.net/manual/zh/opcache.configuration.phphttp://www.laruence.com/2015/12/04/3086.htmlhttps://huoding.com/2016/05/27/515http://blog.jpauli.tech/2015/03/05/opcache.htmlhttp://www.freebuf.com/articles/105793.html
标签:

相关文章