【问题标题】:xcache how does it work? code coverage? clogs? OOMs?xcache 它是如何工作的?代码覆盖率?木屐? OOM?
【发布时间】:2012-11-17 14:58:49
【问题描述】:

我在整个网络上搜索了包括XCache website 在内的文档。

我是 PHP 操作码缓存和 XCache 的新手。我想解释一下 XCache 的工作原理。我知道它存储已编译的 php 代码,因此不需要每次都重新编译。但是 XCache 是如何知道 php 代码何时更新从而导致缓存过期的呢?

我如何知道是否需要清除缓存?

XCache 是否在服务器上编译和缓存所有 php 代码?如果可以这样可以配置吗?

什么是木屐? OOM?我在 XCache 管理页面界面中看到了这两个的大量数字。

在代码覆盖率查看器中...百分比是什么意思?这是已缓存代码的百分比吗? 命中是否意味着已从缓存中读取的编译代码行数? 行数是指代码的总行数吗? ToDo 列有什么用? 为什么有些行以红色突出显示?

如果有帮助,我正在使用 PHP 5.3.2、XCache 1.3.0 和 Ubuntu 10.04。

【问题讨论】:

  • 我明白了...这里有 12 个问题?来吧。
  • @ceejayoz 显然是文档不佳的标志

标签: php xcache opcode-cache


【解决方案1】:

Xcache:

通过消除 PHP 脚本的编译时间来优化性能 通过将 PHP 脚本的编译状态缓存到 shm (RAM) 和 使用直接从 RAM 中编译的版本。

根据使用 PHP 5.5.3 和 Xcache 3.1.0 的观察结果,我可以得出以下结论:

缓存器

这个模块处理两种缓存Opcode变量

Opcode 缓存被设计为一个简单的插件。您无法自定义它决定缓存的方式,只是多少:

  • xcache.count 设置是指缓存线程的数量,并与您要使用的处理器内核数相关——这个想法是multithreading 应该是最快的,但不能保证所以自己试验
  • 作为准则,有效计数值为 2^n,例如 1、2、4、8 — 0 将禁用缓存,其他值将四舍五入为最接近的有效值
  • xcache.size 设置是指所有缓存线程的聚合内存。因此,每个线程大致获得size/count 的内存量
  • OOM 又名Out of Memory,指缓存线程达到其最大大小的事件

变量缓存需要在您的应用代码中使用简单的 get/set api。使用 xcache.var_sizexcache.var_count(类似于 Opcode 设置)启用它后,您可以在脚本中使用 xcache_set($var1)xcache_get($var1)

失效

xcache.stat 设置控制是否检查文件在缓存后是否被修改:

  • 当设置为开启时,文件会被检查并重新缓存
  • 当设置为 Off 时,将跳过检查将保留第一个缓存版本,只要过期时间,可以通过限制磁盘 i/o 来提高性能

在您的开发环境中,最好将其保持开启,这样您就可以不断更新和检查您的代码——否则您必须刷新缓存才能看到文件的更新。

冲洗

有一个 Web 管理界面允许您刷新特定的缓存。 Web 管理员使用 php api:xcache_clear_cache(…)

由于缓存是基于 RAM 的,因此无论何时服务器重新启动缓存都应该被刷新。

过期

缓存项根据xcache.ttlxcache.var_ttl 过期,它们分别控制缓存项的生存秒数(0 是不确定的,默认值)。

覆盖范围

覆盖模块,又名代码覆盖,有点神秘。根据FeatureList 的说法,它似乎是一种旨在为临时管理/测试情况启用的诊断工具:

  • Coverager + 真实测试用例框架,包括:[TOSHARE]
    • 现实生活中的测试用例框架,一个带有真实浏览器的控制脚本。你必须编写测试用例。
    • 内置 Coverager + 来自网络的查看器,以查看您测试了多少脚本。
  • testcase+Coverager 只是帮助您确保所有现实生活中的 php web 应用程序在以下情况下正确运行
    • 启用 XCache 后
    • 将php4升级到php5后
    • 将php4/5升级到php6后

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2018-10-14
    • 2016-10-23
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多