我们使用Apache和php-fpm运行生产服务器并启用了opcache。目前,opcache的上限为1024MB可用内存。
然而,当我最近分析服务器和opcache时,我注意到FPM / opache使用的实际内存与操作系统实际报告的内存之间存在明显差异。
分析opcache,它告诉我从现在开始使用大约850MB的内存,缓存大约8000个脚本。但是,htop告诉我当前进程只使用大约600MB的RAM,其中FPM占用大约150MB。
我只能假设这意味着opcache将缓存的脚本存储在磁盘而不是RAM上。但是,由于性能对我们很重要并且我们有RAM备用,我们是否有办法强制opcache将所有缓存的脚本存储在RAM中?
答案 0 :(得分:0)
Opcache已将所有已编译的代码(操作码)存储在内存中。
OPcache通过存储预编译脚本来提高PHP性能 共享内存中的字节码,从而消除了加载PHP的需要 并在每个请求上解析脚本。
http://php.net/manual/en/intro.opcache.php
这些数字是不同的,因为计算内存使用的方式不同,htop,使用系统API进行顶部计算,其中opcache_get_status使用内部方法计算相同内容 - http://gcov.php.net/PHP_5_5/lcov_html/ext/opcache/zend_accelerator_module.c.gcov.php
由于语言级别的共享变量/内存优化,这是可能的。