我目前在使用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这是一个不同寻常的设置,生成的文件被缓存,所以有时会出现问题,文件会被替换/重新缓存。
有没有人能想到为什么opcache会将这些文件显示为680.00b?opcache_reset或opcache_invalidate没有任何帮助。我必须完全替换这些文件,并使用opcache_reset让它们以真实的文件大小显示出来,这使得监控/故障排除变得困难。
提前谢谢。
发布于 2016-11-16 13:51:31
当涉及到显示相同消耗的不同脚本时:一个可能的原因是opcache需要分配对齐的内存,以便在当前平台上获得最佳性能。
void *mem = zend_opcache_alloc(sizeof(void*));mem将为sizeof void* + ZEND_MM_ALIGNMENT(sizeof void*, platform)
因此,在区域的末尾有某种类型的填充,以强制最佳对齐,这意味着您可以分配(例如)8字节或64字节,并将返回128字节的块(这些数字都不正确)。
这可能会导致不同的脚本巧合地具有相同的大小。
<?php
$a = 1;
?>生成以下统计信息:
["/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)
}因此,您应该怀疑代码没有被正确缓存,除非这些文件包含类似的(单语句、单指令)代码。
https://stackoverflow.com/questions/40609931
复制相似问题