Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以强制opcache将缓存的脚本保留在内存中?_Php_Caching_Memory_Opcache - Fatal编程技术网

Php 是否可以强制opcache将缓存的脚本保留在内存中?

Php 是否可以强制opcache将缓存的脚本保留在内存中?,php,caching,memory,opcache,Php,Caching,Memory,Opcache,我们使用Apache和启用了opcache的php fpm运行生产服务器。目前,opcache的可用内存上限为1024MB 然而,当我最近分析服务器和opcache时,我注意到FPM/opache实际使用的内存与OS实际报告使用的内存之间存在着明显的差异 分析opcache时,它告诉我,截至目前,它使用了大约850MB的内存,缓存了大约8000个脚本。然而,htop告诉我,当前的进程只使用了大约600MB的RAM,其中FPM占用了大约150MB 我只能假设这意味着opcache将缓存的脚本存储在

我们使用Apache和启用了opcache的php fpm运行生产服务器。目前,opcache的可用内存上限为1024MB

然而,当我最近分析服务器和opcache时,我注意到FPM/opache实际使用的内存与OS实际报告使用的内存之间存在着明显的差异

分析opcache时,它告诉我,截至目前,它使用了大约850MB的内存,缓存了大约8000个脚本。然而,htop告诉我,当前的进程只使用了大约600MB的RAM,其中FPM占用了大约150MB


我只能假设这意味着opcache将缓存的脚本存储在磁盘上而不是RAM上。但是,由于性能对我们来说很重要,而且我们还有剩余的RAM,我们有没有办法强制opcache将其所有缓存脚本存储在RAM中?

opcache已经将所有编译代码(opcode)存储在内存中

OPcache通过存储预编译脚本来提高PHP性能 字节码在共享内存中,从而消除了PHP加载的需要 并在每个请求上解析脚本

由于使用系统API计算内存使用量、htop、top计算的方式不同,这些数字会有所不同,其中as opcache_get_status使用内部方法计算相同的数据-


这是可能的,因为共享变量/语言级别的内存优化。

Opcache已将所有编译代码(操作码)存储在内存中

OPcache通过存储预编译脚本来提高PHP性能 字节码在共享内存中,从而消除了PHP加载的需要 并在每个请求上解析脚本

由于使用系统API计算内存使用量、htop、top计算的方式不同,这些数字会有所不同,其中as opcache_get_status使用内部方法计算相同的数据-


这是可能的,因为共享变量/语言级别的内存优化。

您认为您的脚本需要超过150MB吗?我更希望它们都保存在内存中。我们正在运行一个专用的分片,该分片有足够的可用RAM。Opcache只使用RAM来缓存脚本,因为Opcache将编译的操作码存储在内存中,内存结果将因探查器而异。只需添加—您可以检查其他配置,如禁用filestamp check it wil reduce几毫秒。我已经禁用了时间戳检查和其他面向开发人员的设置,因为这是一个生产服务器。正如我在问题中提到的,除非opcache或操作系统报告错误的内存使用情况,否则opcache根本不可能缓存在内存中。您如何分析opcache?您认为您的脚本需要150MB左右吗?我更希望它们都保存在内存中。我们正在运行一个专用的分片,该分片有足够的可用RAM。Opcache只使用RAM来缓存脚本,因为Opcache将编译的操作码存储在内存中,内存结果将因探查器而异。只需添加—您可以检查其他配置,如禁用filestamp check it wil reduce几毫秒。我已经禁用了时间戳检查和其他面向开发人员的设置,因为这是一个生产服务器。正如我在问题中提到的,opcache不可能缓存在内存中,除非它或操作系统报告错误的内存使用情况?