【问题标题】:Reduce PHP IO load减少 PHP IO 负载
【发布时间】:2011-08-23 08:52:44
【问题描述】:

我有一个 PHP 脚本,可以处理许多大小不超过 10mb 的小文件 (>100,000)。它基本上将请求的文件加载到内存中并将其提供给客户端。由于访问控制,我不能直接通过 apache 提供这些文件,需要一个脚本包裹它。

如果有高流量 (>150mbit) 我的硬盘被大量使用并且代表了扩展的限制。我有一个想法,我可以使用 memcached 来减少硬盘负载,因为我有 10gig 的可用内存,但 memcached 的最大项目大小为 1MB。然后我想我可以使用 PHP-APC,但是如果缓存耗尽内存(完全重置),它的行为是不可接受的。

你会做些什么来减少 IO 负载?

谢谢

【问题讨论】:

    标签: php caching filesystems io


    【解决方案1】:

    你会做些什么来减少 IO 负载?

    我自己从未使用过它,但X-Sendfile 方法可能有助于减轻一些负担。它将实际提供文件的任务传回给 Apache。

    【讨论】:

      【解决方案2】:

      我认为你不能这样做,除非你有 2 个硬盘来分割这些文件。

      【讨论】:

        【解决方案3】:

        我会使用 PHP-APC 将这些文件加载​​到缓存中。

        apc_add()apc_fetch()apc_delete() 是您想要的。您可以通过使用apc_cache_info() 确定可用内存级别来确保不会溢出。您还可以设置apc.user_ttl INI 设置以防止在填充时完全清除缓存。

        在测试服务器上进行设置,使其承受高负载(使用ab 等)并使用apc.php 检查您的统计信息。调整、调整和再调整!

        【讨论】:

        • 另外,我刚刚收到一封来自亚马逊的电子邮件,他们现在有aws.amazon.com/elasticache - 你不是在为他们做草皮吗? ;)
        • 我刚试过。我已将 apc.user_ttl 和 apc.ttl 设置为 30 并多次使用 apc_add。超过限制后,缓存总是被完全清除:-(
        • @Philip 这令人失望。 APC 对于 GC 有点不可靠。您可以使用apc_cache_info() 来确定缓存是否接近大小并且在这种情况下不添加吗?或者,如果接近限制,您可以使用 apc_delete() 和包含项目、大小、年龄和访问时间的数据库进行自己的 GC,以从最旧的项目中释放所需的内存?
        【解决方案4】:

        您可以使用支持访问控制的 CDN。

        不过,如果您想继续自己提供服务,可以采取多种方法。不过,您总是希望避免通过 PHP 提供文件,因为那是您的瓶颈。不过,这些都不是很优雅。

        • 将文件存储在 HTTP 根目录之外,并每 X 分钟生成一个新的符号链接。符号链接在 Y 时间后被删除。然后,您的 PHP 身份验证脚本将简单地将用户重定向到存在(临时有效)符号链接的 URL。非常短的 PHP 执行时间,由 Apache 提供的文件。
        • 将文件保留在 HTTP 根目录中,但更改 .htacess 文件中的重写规则以实现相同的目的。

        通过将最常访问的文件存储在 ramdisk 中来减少 IO 负载,通过一些安装魔法或符号链接将它们与常规文件系统集成,然后让 Apache 处理其余部分。

        【讨论】:

          【解决方案5】:

          您需要mod_xsendfile for Apache2nginx with X-Accel-Redirect。 lighttpd 也有类似的解决方案。 Nginx 也可以serve from memcached

          如果您正在考虑将常用文件存储在 tmpfs 中,请不要这样做。这不是一个真正的解决方案,因为即使您直接从磁盘提供文件,后续请求也会到达系统缓存,并且您将获得与 tmpfs 相似的速度。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多