禁用或删除 APC

禁用或删除 APC

我对 PHP APC 缓存系统感到很失望,我想从我的服务器中彻底删除/禁用它。我在 Debian Squeeze 上使用安装了 Nginx 的 PHP,有什么办法吗?

答案1

而不是删除 APC,这将导致大量的性能受到影响,实际上是搬起石头砸自己的脚。

尝试这个:在 /etc/php5/conf.d/apc.ini 中:

extension=apc.so
apc.shm_size=128M
apc.shm_segments=1
apc.max_file_size=5M
apc.num_files_hint=10000
apc.slam_defense = 0
apc.write_lock=1

如果您有足够的可用 RAM,您可以将其增加到apc.shm_size大于 128 的值,比如说 512。

我在自己运行的服务器上做过这个,但从来没见过无法为池分配内存错误。

答案2

删除/opt/php5/etc/conf.d/apc.ini或用 注释掉其中的所有行;。之后别忘了重启你的网络服务器。

还请检查“/etc//php5/apache2/php.ini”中的“extension=apc.so”以将其注释掉。

如果您仍有源代码,您可以尝试make uninstall之后再做。我不知道 makefile 是否包含此目标。

答案3

如果您没有安装 Squeeze 提供的其他软件,一个简单的apt-get remove php-apc操作就可以了。

答案4

解决方案是增加分配给 APC 的内存。

使用 TTL 0 意味着 APC 在内存不足时将刷新所有缓存。错误不再出现,但它使 APC 效率大大降低。这是一个没有风险、没有麻烦的“我不想做我的工作”的决定。APC 不应该这样使用。您应该选择足够高的 TTL,以便访问最多的页面不会过期。最好的是提供足够的内存,这样 APC 就不需要刷新缓存。

只需阅读手册即可了解如何使用 ttl:http://www.php.net/manual/en/apc.configuration.php#ini.apc.ttl

您可以通过增加 apc.shm_size 来增加分配的内存。

如果 APC 被编译为使用共享段内存,那么您将受到操作系统的限制。键入此命令以查看每个段的系统限制:

sysctl -a | grep -E "shmall|shmmax"

要分配更多内存,您必须使用参数 apc.shm_segments 增加段数。

如果 APC 使用 mmap 内存,则没有限制。内存量仍然由相同的选项 apc.shm_size 定义。

如果服务器内存不足,则使用过滤器选项来防止不常访问的 php 文件被缓存。

但切勿使用 TTL 0。

使用 apc.php 检查您的配置。您将看到实际分配的内容及其使用方式。图表必须在几个小时后保持稳定,如果它们在每次刷新时都完全改变,则意味着您的设置是错误的(APC 正在刷新所有内容)。分配比 APC 实际使用的 20% 作为安全裕度,并定期检查。

默认只允许 32MB 内存,这太低了。PHP 是在服务器为 64MB 且大多数脚本每页使用一个 php 文件时设计的。如今,像 Magento 这样的解决方案需要超过 10k 个文件(APC 中约为 60Mb)。您应该允许足够的内存,以便大多数 php 文件始终被缓存。这不是浪费,将操作码保存在内存中比将相应的原始 php 保存在文件缓存中更有效。如今,我们可以找到具有 24GB 内存的专用服务器,价格低至 150 美元,所以不要犹豫,为 APC 预留几 GB。我将 24GB 中的 2GB 放在一台托管 5 个 Magento 商店和约 40 个 wordpress 网站的服务器上,APC 使用 1.2GB。计算 64MB 用于 Magento 安装,20MB 用于带有一些插件的 Wordpress。

相关内容