PHP/Centos/Apache 的 eAccelerator 设置

PHP/Centos/Apache 的 eAccelerator 设置

我在 CentOS 上使用 PHP/Apache 在运行 Wordpress 的服务器上安装了 eAccelerator。我偶尔会收到持续的“白页”,这可能是 PHP 致命错误(尽管这些错误没有出现在我的 error_log 中)。这些“白页”散布在整个网站各处。它们一直存在,直到我转到我的 eAccelerator control.php 页面并清除/清理/清除我的缓存,这表明我对 eAccelerator 的配置不正确。

这是我当前的 /etc/php.ini 设置:

  • memory_limit = 128M;
  • eaccelerator.shm_size="64"其中 shm.size 是“eAccelerator 应分配给缓存 PHP 脚本的共享内存量”(参见http://eaccelerator.net/wiki/Settings
  • eaccelerator.shm_max="0"其中 shm_max 是“用户可以使用 eaccelerator_put 等函数放入共享内存的最大大小……默认值为“0”,表示禁用限制”
  • eaccelerator.shm_ttl="0"- “当 eAccelerator 没有足够的可用共享内存来缓存新脚本时,它将从共享内存缓存中删除至少 shm_ttl 秒内未访问的所有脚本。默认情况下,此值设置为“0”,这意味着 eAccelerator 不会尝试从共享内存中删除任何旧脚本。”
  • eaccelerator.shm_prune_period="0"- “当 eAccelerator 没有足够的可用共享内存来缓存脚本时,如果上一次尝试是在“shm_prune_period”秒之前进行的,它会尝试删除旧脚本。默认值为“0”,这意味着 eAccelerator 不会尝试从共享内存中删除任何旧脚本。”
  • eaccelerator.keys = "shm_only"- “这些设置控制 eAccelerator 可以缓存用户内容的位置。...‘shm_only’ 将数据缓存在共享内存中”

在我的 phpinfo 页面上,显示:

  • memory_limit 128M
  • Version 0.9.5.3Caching Enabled true

在我的 eAccelerator control.php 页面上,它显示

  • 总共 64 MB 可用 RAM
  • Memory usage 77.70% (49.73MB/ 64.00MB)
  • PHP 操作码缓存中的缓存脚本使用了 27.6 MB(我自己添加了文件大小)
  • 22.1 MB 由缓存键使用,由 Wordpress 对象缓存填充。

我的问题是:

  • eAccelerator 缓存中是否真的只有 36.4 MB 的空间用于存储所有“缓存键”(总 RAM 64 MB 减去缓存脚本占用的空间,目前为 27.6 MB)?
  • 如果我的应用程序尝试将超过 22.1 MB 的缓存密钥写入 eAccelerator 内存缓存,会发生什么情况?这是否会导致 eAccelerator 出现问题,就像我所看到的那样?
  • 如果我将 eaccelerator.shm_max 改为等于(比如说) 32 MB,是否可以避免这个问题?
  • 我是否还需要更改 shm_ttl 和 shm_prune_period 以使 eAccelerator 遵守 shm_max 设置的 MB 限制?

谢谢! :-)

答案1

我使用几乎相同的 eAccelerator 设置,从未遇到过任何类似的问题(我没有任何“键”设置)。据我所知,调整设置只会改变缓存的有效性。“不良”的 eAccelerator 设置只会导致脚本运行缓慢……而不是脚本错误。

我不明白您说的“36.4 MB 空间用于缓存密钥”是什么意思。从您的问题来看,eAccelerator 总共使用了 49.73 MB,其中 27.6MB 用于脚本,22.1MB 用于密钥 (27.6+22.1=49.7),剩余 14.3MB 可用。

使用当前设置,当分配的 64MB 达到上限时,eAccelerator 将不再缓存任何内容。应该除了某些脚本运行速度不如预期快之外,这不会造成任何问题。如果您希望删除旧的缓存条目,可以使用上述各种设置。我通常只是增加 eAccelerator 的内存量,以便它能够将所有脚本都保存在内存中。

如果您的脚本显示“白页”,我会仔细检查错误日志。如果您没有收到任何错误消息,我会检查错误日志是否已启用并正常工作。我会尝试禁用 eAccelerator,看看您是否可以复制脚本错误。如果这种情况似乎只发生在 eAccelerator 上,我会卸载它并从头开始安装。

另一个可能性很小的原因是内存或磁盘损坏,从而破坏了缓存版本。

相关内容