APC(PHP 缓存)正常运行时间 0 分钟,不缓存

APC(PHP 缓存)正常运行时间 0 分钟,不缓存

我的目标是为 drupal 6 生产站点实现操作码缓存的 APC。到目前为止,我已经使用几个 php 文件测试了 APC,包括和不包括使用 include_once 包含其他 php 文件的情况。

还尝试调整 apc.ini 中 shm_size、apc.include_once_override 和 apc.stat 的值。每次都要重新启动 apache。

导致 apc.php 没有显示任何值的变化。(当然,改变后的 apc.ini 值不会按应有的方式显示)

每次我刷新 apc.php 测试页面时,开始时间都会重置为当前时间,显示正常运行时间 0 分钟。

apc.php -testpage显示:

General Cache InformationAPC Version    3.1.9
PHP Version 5.2.10
APC Host    xxxx.xx.xx
Server Software Apache/2.2.3 (CentOS)
Shared Memory   1 Segment(s) with 128.0 MBytes
(mmap memory, pthread mutex Locks locking)
Start Time  2011/07/26 11:53:56
Uptime  0 minutes
File Upload Support 1


Cached Files    0 ( 0.0 Bytes)
Hits    1
Misses  1
Request Rate (hits, misses) 2.00 cache requests/second
Hit Rate    1.00 cache requests/second
Miss Rate   1.00 cache requests/second
Insert Rate 0.00 cache requests/second
Cache full count    0

Cached Variables    0 ( 0.0 Bytes)
Hits    0
Misses  0
Request Rate (hits, misses) 0.00 cache requests/second
Hit Rate    0.00 cache requests/second
Miss Rate   0.00 cache requests/second
Insert Rate 0.00 cache requests/second
Cache full count    0


apc.cache_by_default    1
apc.canonicalize    1
apc.coredump_unmap  0
apc.enable_cli  0
apc.enabled 1
apc.file_md5    0
apc.file_update_protection  2
apc.filters 
apc.gc_ttl  3600
apc.include_once_override   0
apc.lazy_classes    0
apc.lazy_functions  0
apc.max_file_size   16
apc.mmap_file_mask  /tmp/apcphp5.095eRm
apc.num_files_hint  1024
apc.preload_path    
apc.report_autofilter   0
apc.rfc1867 0
apc.rfc1867_freq    0
apc.rfc1867_name    APC_UPLOAD_PROGRESS
apc.rfc1867_prefix  upload_
apc.rfc1867_ttl 3600
apc.serializer  default
apc.shm_segments    1
apc.shm_size    128M
apc.slam_defense    0
apc.stat    0
apc.stat_ctime  0
apc.ttl 7200
apc.use_request_time    1
apc.user_entries_hint   4096
apc.user_ttl    7200
apc.write_lock  1

Host Status Diagrams:
 Free: 128.0 MBytes (100.0%)     Hits: 1 (50.0%)
 Used: 20.3 KBytes (0.0%)    Misses: 1 (50.0%)

Detailed Memory Usage and Fragmentation:
Fragmentation: 0%

phpinfo显示:

Server API  CGI/FastCGI

APC:
Version     3.1.9
APC Debugging   Enabled
MMAP Support    Enabled
MMAP File Mask  /tmp/apcphp5.JkKDk7
Locking type    pthread mutex Locks
Serialization Support   php
Revision    $Revision: 308812 $
Build Date  Jul 21 2011 14:31:12

我按照以下步骤查找 suexec 设置是否会阻止缓存: http://www.litespeedtech.com/support/forum/showthread.php?t=4189

[root@host /]# ps -ef|grep lsphp
root     20402 17833  0 11:21 pts/0    00:00:00 grep lsphp

[root@host /]# ps -waux
root     17833  0.0  0.1   5004  1484 pts/0    S    10:39   0:00 bash

..表示主机上没有运行 lsphp

我还阅读了以下文章和评论,得出结论,在我的情况下,问题不在于 suexec,因为用户 apache 是 httpd 进程所有者 http://www.brandonturner.net/blog/2009/07/fastcgi_with_php_opcode_cache/

此外,以 root @ host 身份登录并启动时,suexec 命令也无法被识别

此外,我几乎确信主机上没有运行 cPanel,因此检查那里的设置是否会在某个时间间隔重置正在运行的缓存进程

这让我对下一步该怎么做没有多少线索。我尝试将 apache 设置为 apc.php 文件和一些测试 php 文件的所有者(使用 chown 和 chgrp),结果出现了 500 服务器错误。

有没有办法检查文件权限是否阻止 apc 继续运行?我非常感谢任何建议或帮助。

答案1

您的配置表明apc.max_file_size被设定为16 字节。因此,不会缓存大于 16 字节的文件(所有文件都是!)。我会将其重置为默认值1M

答案2

您是否在该主机上启用了 SELinux?使用 检查getenforce。如果返回Enforcing,则表示已启用。

如果它已启用而您不需要它,请尝试使用 暂时(直到下次重新启动)禁用它setenforce 0。如果这解决了您的问题并且您需要永久禁用 SELinux,请修改/etc/selinux/config文件并将其设置为禁用。或者,您可以尝试修改 SELinux 以使其更加宽松,但这是另一个话题,如果这确实是由于 SELinux 造成的,我们将回到这个话题。:-)

编辑:好的,SELinux 已被禁用。

您是否看到/tmp/apcphp5.JkKDk7/tmp 下出现了时尚的文件?

答案3

我遇到了同样的问题。这是一个 tmp 问题。将 mmap_file_mask 设置为 /dev/zero 可以进行缓存。详细信息发布在 drupal.org 上,用户名相同。

如果没有使用正确的权限安装 tmp,则设置其权限无济于事。

答案4

如果有人发现此问题类似,则可能需要检查apc.enable_opcode_cache = 1

“在开发分支(3.1.5dev)中,引入了一个选项来禁用操作码缓存(apc.enable_opcode_cache=0),这允许严格将 Zend OPcache 和 APC 用于用户数据。”-Remi 博客

相关内容