PHP 应用程序是否可以从 RAM 驱动器中获益?

PHP 应用程序是否可以从 RAM 驱动器中获益?

我负责托管一个 PHP 应用程序,它很大而且很慢,但易于扩展。该应用程序完全是静态的,需要可写的磁盘存储。我们已经对该应用程序进行了分析,主要瓶颈似乎来自加载应用程序,而不是应用程序所做的工作。该应用程序并不占用大量 CPU,尽管它确实使用了相当多的内存(想想 Magento)。

目前,我们通过一系列服务器来分发它,这些服务器的硬盘上都有相同的 PHP 文件,并且在它们前面有一个负载平衡器。简单但昂贵。

我一直在阅读RAM 磁盘以及它们提供的 IO 优势,并想知道它们是否适合 PHP 应用程序。

由于 PHP 应用程序在每次请求时都从磁盘加载,而且通常涉及许多不同的文件(而不是像 Java 应用程序那样保存在内存中),所以我认为磁盘性能可能是一个严重的瓶颈。

将 PHP 文件放在 RAM 磁盘上并使用挂载点作为 Apache 的文档根目录是否会带来性能优势?启动脚本可以创建 RAM 驱动器,然后将文件(纯文本且较小)从永久位置复制到临时 RAM 驱动器。

这有意义吗,或者我应该只相信 Linux 内核自己在内存中缓存适当的文件?

答案1

不,ramdisk 实际上会损害 PHP(当与 PHP 加速器等更好的解决方案结合使用时)。

提高 PHP 性能的最佳方法是使用 PHP 加速器。这些模块插入 Web 引擎(例如 apache httpd)并缓存 PHP 脚本的已编译字节码。然后,此缓存存储在 RAM 中。结果是,将来对 PHP 脚本的调用根本不会进入磁盘,预编译的字节码将从缓存中提取。这意味着您不会从使用 ramdisk 中获得任何好处,而是最终消耗了可用于其他地方的 RAM。

根据您的发行版和您使用的 Web 服务器引擎,您可能已经正在运行 PHP 加速器。

以下是有关该主题的两篇很好的维基百科文章:
PHP加速器
PHP 加速器列表

答案2

我倾向于认为,如果你的机器有足够的内存,操作系统磁盘缓存在缓存相应内容方面也会做得一样好(如果不是更好的话,因为它不会缓存不是使用),但您应该在验证确实过度访问磁盘(使用 sar)之后,在测试服务器上对其进行基准测试。

答案3

PHP 最大的问题是,对于每个请求,解释器必须

  1. 从文件系统获取文件
  2. 阅读
  3. 将其翻译成可执行形式
  4. 执行它

亚太经合组织您可以跳过所有步骤,直接执行。如果您遇到性能问题,尤其是在观察到您提到的分析结果后,请安装并配置 APC。您会惊讶于您获得的性能提升。

我面临的问题是优化大量 wiki指南组织;在新闻发布会之后,他们收到的报纸报道会系统性地将系统负载推至 100%。配置仅 25 MB 缓存的 APC 可将系统负载直接降至 5% 以下。进一步的基本调整可降至 1% 以下。

同时,由于步骤 1-3 大部分都是引入延迟,用户体验到的响应时间得到了显著改善。

针对您描述的场景的一些进一步提示:

  • 为 APC 分配 25MB 或更大的缓存段(确保您的操作系统允许此大小的 SHM 段)。APC 使用的缓存替换策略确保您最常请求的内容将位于缓存中,因此这可能会给您带来超过 95% 的命中率。增加分配的内存所带来的好处则要小得多。
  • 对于您提到的大多数静态应用程序,禁用 apc.stat 可进一步提高性能。这样 APC 就可以直接在缓存中查找 PHP 文件,而无需在文件系统上检查它们是否自上次执行以来被修改过。每个请求都完全从内存中处理,永远不会到达文件系统,从而带来显著的性能。
  • 运行 APC 后,性能瓶颈可能会转移到应用程序内部。特别是数据库和文件系统(如果您使用其中任何一个)。Memcached可以帮助您解决应用程序代码中相对较小的变化。

答案4

不会,如果 RAM 已经是瓶颈的话,就不会了。

相关内容