【问题标题】:Optimize APC Caching优化 APC 缓存
【发布时间】:2011-04-03 23:07:56
【问题描述】:

这是我的 APC 运行方式的链接:[已删除]

如您所见,它很快就会被填满,我的 Cache Full Count 有时会超过 1000

我的网站使用 Wordpress。

我注意到,每次我发布新帖子或编辑帖子时,都会发生 2 件事。

1) APC 内存“已使用”重置 2)我得到了很多碎片

我尝试为 APC (512 mb) 提供更多内存,但有时它会崩溃,似乎 384 是最好的。我还有一个 Cron 作业,它每 4 小时重新启动 apache,清除所有 APC 的碎片和已用内存。同样,如果 APC 长时间运行,我的 apache 会崩溃,我认为是由于碎片堆积造成的。

我应该使用 apc.Filters 过滤掉一些不应该被缓存的东西吗?

我真的是这种东西的初学者,所以如果有人能详细说明,非常感谢!

【问题讨论】:

    标签: wordpress apc opcode opcode-cache fragment-caching


    【解决方案1】:

    我是一名 Linux 系统管理员,wordpress 服务器运行 5 种不同的 WordPress 安装。如果您只运行一个,我将评论要考虑的配置。

    APC / PHP 版本,3.1.9 / 5.3.7

    这是我完整的 apc.conf,

    apc.enabled=1
    apc.shm_segments=1
    
    ; I would try 32M per WP install, go from there
    apc.shm_size=128M
    
    ; Relative to approx cached PHP files,
    apc.num_files_hint=512
    
    ; Relative to approx WP size W/ APC Object Cache Backend, 
    apc.user_entries_hint=4096
    
    apc.ttl=7200
    apc.use_request_time=1
    apc.user_ttl=7200
    apc.gc_ttl=3600
    apc.cache_by_default=1
    apc.filters
    apc.mmap_file_mask=/tmp/apc.XXXXXX
    apc.file_update_protection=2
    apc.enable_cli=0
    apc.max_file_size=2M
    
    ;This should be used when you are finished with PHP file changes.
    ;As you must clear the APC cache to recompile already cached files.
    ;If you are still developing, set this to 1.
    apc.stat=0
    
    apc.stat_ctime=0
    apc.canonicalize=1
    apc.write_lock=1
    apc.report_autofilter=0
    apc.rfc1867=0
    apc.rfc1867_prefix =upload_
    apc.rfc1867_name=APC_UPLOAD_PROGRESS
    apc.rfc1867_freq=0
    apc.rfc1867_ttl=3600
    
    ;This MUST be 0, WP can have errors otherwise!
    apc.include_once_override=0
    
    apc.lazy_classes=0
    apc.lazy_functions=0
    apc.coredump_unmap=0
    apc.file_md5=0
    apc.preload_path
    

    @Chris_O,您的配置在某些方面不是最佳的。

    1. apc.shm_segments=3

    如果您运行现代 Linux 发行版,您的 SHM 应该足够大。 如果太小搜索如何设置 sysctl.conf 条目,可以这样检查。

    #Check Max Segment size
    cat /proc/sys/kernel/shmmax
    

    在某些 BSD 或其他 Unix 或您无法控制的托管主机上运行时出现异常。没有连续段有缺点,请阅读 APC 的详细信息以获取该信息。

    2。 apc.enable_cli=1

    BAD BAD BAD,这仅用于调试!每次运行 php-cli 时,它都会清除 APC 缓存。

    3. apc.max_file_size=10M

    不必要且荒谬!如果你有一个那么大的文件,它会吃掉那个小 32M SHM 的 1/3。即使您指定了 3,它们也不会像三个部分中的一个大段。不管 WP 甚至没有接近那个大小的单个 PHP 文件。

    '希望我在他们的 apc.conf 中帮助了人们。

    【讨论】:

    • @TechZilla,我正在使用 Yii 框架,它大量使用延迟加载类,所以我应该启用 apc.lazy_classes 和 apc.lazy_functions,它会影响其他任何东西吗?
    • @Uday Sawant:APC 的延迟加载与 Yii 框架中的延迟加载不同。 Yii 是专门以“懒惰”的方式编写的,而使用 APC,它通常是关于加载“懒惰”的。特别是对于 Yii,我仍然会将这些减速保持为“0”。手动“延迟”加载可能在没有外部干扰的情况下表现最佳。我还想提一下,那些 APC 减速仍然是相当新的,在我考虑设置“1”之前需要更多的测试/统计/成熟度。
    • @TechZilla:谢谢兄弟...你能推荐任何工具来对这些设置进行基准测试吗?
    • @Uday Sawant:当我需要快速基准测试而不是认真的 Jmeter 分析时,我使用abhttperf。您通常可以从您的 disro 存储库安装 abApache HTTP server benchmarking tool。 EL5 rpm 包 httpd、EL6 rpm 包 httpd-tools、Ubuntu/Debian Deb 包 apache2-utils。
    【解决方案2】:

    APC ttl 应该负责片段的构建。我通常将其设置为 7200。我在带有 WordPress 的小型 VPS 上运行它,我的设置是:

    apc.enabled=1
    apc.shm_segments=3
    apc.shm_size=32
    apc.ttl=7200
    apc.user_ttl=7200
    apc.num_files_hint=2048
    apc.mmap_file_mask=/tmp/apc.XXXXXX
    apc.enable_cli=1
    apc.max_file_size=10M
    

    通过使用 WordPress 的内置对象缓存,您还将从中获得更多好处,Mark Jaquith 写了一个非常好的drop in plugin,这也应该有助于您在保存或编辑帖子时遇到一些碎片问题。

    【讨论】:

      【解决方案3】:

      您确实应该在您的生产服务器上设置 apc.stat=0,这将阻止 APC 实际进入 IO 以检查文件是否已更改。

      首先查看文档:http://php.net/manual/en/apc.configuration.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-21
        • 2015-01-08
        相关资源
        最近更新 更多