首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opcache状态内存大小问题

Opcache状态内存大小问题
EN

Stack Overflow用户
提问于 2016-11-15 20:32:26
回答 1查看 436关注 0票数 0

我目前在使用PHP7.0-FPM时遇到了一些问题,使一些麻烦的opcache条目无效。

当我在opcache_get_status中查看时,一些文件正在被缓存,内存大小为680.00b。这些文件的大小通常在50kb左右,看起来缓存正确,但Opcache报告的一些文件的大小恰好是680.00b。

Opcache设置:

代码语言:javascript
复制
; 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让它们以真实的文件大小显示出来,这使得监控/故障排除变得困难。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-16 13:51:31

当涉及到显示相同消耗的不同脚本时:一个可能的原因是opcache需要分配对齐的内存,以便在当前平台上获得最佳性能。

代码语言:javascript
复制
void *mem = zend_opcache_alloc(sizeof(void*));

mem将为sizeof void* + ZEND_MM_ALIGNMENT(sizeof void*, platform)

因此,在区域的末尾有某种类型的填充,以强制最佳对齐,这意味着您可以分配(例如)8字节或64字节,并将返回128字节的块(这些数字都不正确)。

这可能会导致不同的脚本巧合地具有相同的大小。

代码语言:javascript
复制
<?php
$a = 1;
?>

生成以下统计信息:

代码语言:javascript
复制
["/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)
}

因此,您应该怀疑代码没有被正确缓存,除非这些文件包含类似的(单语句、单指令)代码。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40609931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档