PHP opcache。100% 命中,100% 使用内存

pyr*_*aur 0 memory nginx cache php-fpm

我的 PHP OPcache 达到 100% 内存使用率

General info
Zend OPcache    7.0.4-dev
PHP 5.5.23-1+deb.sury.org~trusty+2
Server Software nginx/1.6.2
Run Code Online (Sandbox Code Playgroud)

这是我的缓存设置:

zend_extension=opcache.so
opcache.memory_consumption=1024
opcache.max_accelerated_files=50000
opcache.revalidate_freq=180
opcache.consistency_checks=0
Run Code Online (Sandbox Code Playgroud)

还有一些关于缓存命中的更多信息:

total memory: 1024.000MB
used memory: 1010.398MB
free memory: 35.086KB
wasted memory: 13.568MB (1.32%)
number of cached files: 10,724
number of hits: 9,576,431
number of misses: 21,450
blacklist misses: 0
number of cached keys: 12,971
max cached keys: 65,407
Run Code Online (Sandbox Code Playgroud)

opcache 面板视图

我应该担心 100% 内存使用率吗?有人可以用外行术语解释 OPcache 内存使用吗?

服务器有 8GB 内存(Linode)

Jay*_*Tee 6

有人可以用外行术语解释 OPcache 内存使用吗?

ldennison 加上各种评论者可能/大部分都回答了这一部分。

另一个很棒的文章可以在这里找到:http : //www.sitepoint.com/understanding-opcache/

请允许我总结一下:

OPcache 允许您预先分配一定数量的内存。您已将其设置为 1024,即。1GB。这是你告诉你的系统:“缓存最多 1GB 的编译过的 php 脚本,这样计算机就不必每次都将它从人类可读的 PHP 代码中转换为计算机可以理解的 1 和 0。” 每次第一次运行这样的脚本时,它的预编译版本都会被添加到这个缓存库中。它在第一次运行时还没有在缓存中,所以这是一个缓存未命中。如果再次请求它,并且已经/仍在缓存中,则从缓存中获取它,从而节省一个“昂贵”的计算阶段。这构成了缓存命中。

内存使用量仅表示您使用了多少 1GB。你会看到 100% 的使用。这意味着您有 1GB 的 php 脚本缓存并准备好从此缓存中提供服务。缓存已满,因此无法添加新脚本,或者删除不受欢迎的缓存项,具体取决于设置/引擎。

我应该担心 100% 内存使用率吗?

不。

如果您的缓存命中率很低,这意味着它反复在缓存中查找文件但找不到它(例如因为它不适合那里),那么您应该“担心”。但是您的缓存命中率很高,这意味着几乎每次它想要从缓存中获取某些东西时,它都会找到它。这意味着您的 1024 MB 缓存大小(占服务器总 RAM 的 1/8)非常好。

将缓存大小加倍可能不会显着改变缓存命中率。添加 100 MB,它可能足以从 96% 增加到 98%。

因此,您看到的“问题”(100% 内存使用)看起来并不是真正的问题。是的,它已经满了,但它并没有错过很多价值。在这种规模下,它可以满足 96% 的需求。这是一个很棒的统计数据。

这样看...

如果一个图书馆已经挤满了椽子,没有更多的容量可以容纳更多的书籍,但它已经承载了世界上 96% 的书籍,是否值得扩建?它会增加图书馆访客的满意度吗?每 100 位访客中就有 96 位已经找到了他们想要的东西。