我目前在使用PHP7.0-FPM时遇到一些问题使一些麻烦的opcache条目无效.
当我在opcache_get_status中查看时,某些文件正在缓存,内存大小为680.00b.这些文件的大小通常约为50kb,并且似乎正确缓存,但Opcache报告的这些文件数量正好是680.00b.
Opcache设置:
; configuration for php opcache module
; priority=10
zend_extension=opcache.so
opcache.memory_consumption=16384
opcache.max_accelerated_files=32531
opcache.validate_timestamps=0
opcache.revalidate_freq=600
opcache.max_file_size=0
opcache.fast_shutdown=1
Run Code Online (Sandbox Code Playgroud)
这是一个不寻常的设置,其中生成的文件被缓存,因此偶尔存在问题并且文件被替换/重新访问.
是否有任何理由可以想到为什么opcache将这些文件显示为680.00b?opcache_reset或opcache_invalidate没有帮助.我必须完全替换文件并使用opcache_reset来显示它们的真实文件大小,这使得监视/故障排除变得困难.
提前致谢.
当涉及到显示相同消耗的不同脚本时:一个可能的原因是opcache需要为当前平台上的最佳性能分配内存.
例如(这些代码都不是真的):
void *mem = zend_opcache_alloc(sizeof(void*));
Run Code Online (Sandbox Code Playgroud)
mem 将会 sizeof void* + ZEND_MM_ALIGNMENT(sizeof void*, platform)
所以在区域的末尾有一些填充以强制最佳对齐,这意味着你可以分配(例如)8个字节或64个字节,并返回一个128字节的块(这些数字都不是正确).
这可能导致不同的脚本具有相同的大小.
当谈到为什么有些脚本使用非常少量的内存时:
<?php
$a = 1;
?>
Run Code Online (Sandbox Code Playgroud)
得出以下统计数据:
["/usr/src/php-src/test.php"]=>
array(6) {
["full_path"]=>
string(25) "/usr/src/php-src/test.php"
["hits"]=>
int(0)
["memory_consumption"]=>
int(696)
["last_used"]=>
string(24) "Wed Nov 16 05:47:26 2016"
["last_used_timestamp"]=>
int(1479275246)
["timestamp"]=>
int(1479275244)
}
Run Code Online (Sandbox Code Playgroud)
因此,您应该怀疑代码没有正确缓存,除非这些文件包含类似的(单个语句,单个指令)代码.