我负责托管一个庞大而缓慢但易于扩展的 PHP 应用程序。该应用程序是完全静态的,需要可写磁盘存储。我们已经分析了应用程序,主要瓶颈似乎来自加载应用程序而不是应用程序所做的工作。该应用程序不是 CPU 密集型的,尽管它确实使用了相当多的内存(想想 Magento)。
目前,我们通过在其硬盘驱动器上安装一系列具有相同 PHP 文件的服务器和在它们前面的负载平衡器来分发它。简单但昂贵。
我一直在阅读有关RAM 磁盘及其提供的 IO 优势的信息,并且想知道它们是否非常适合 PHP 应用程序。
由于 PHP 应用程序是针对每个请求从磁盘加载的,并且通常涉及许多不同的文件(而不是像 Java 应用程序那样保存在内存中),我认为磁盘性能可能是一个严重的瓶颈。
将 PHP 文件放在 RAM 磁盘上并使用挂载点作为 Apache 的文档根目录会带来性能优势吗?启动脚本可以创建 RAM 驱动器,然后将文件(纯文本和小文件)从永久位置复制到临时 RAM 驱动器。
这有意义吗,还是我应该相信 linux 内核会自行将适当的文件缓存在内存中?
不,虚拟磁盘实际上会伤害 PHP(当与更好的解决方案(如 PHP 加速器)结合使用时)。
提高 PHP 性能的最佳方法是使用 PHP 加速器。这些是插入网络引擎(例如 apache httpd)并缓存已编译的 PHP 脚本字节码的模块。然后将此缓存存储在 ram 中。结果是以后对 PHP 脚本的调用根本不会转到磁盘,预编译的字节代码是从缓存中提取的。这意味着您不会从使用 ramdisk 中获得任何好处,而是最终消耗了可以在其他地方使用的 ram。
根据您的发行版和您使用的 Web 服务器引擎,您可能已经运行了 PHP 加速器。
.
这是关于该主题的 2 篇不错的维基百科文章:
PHP 加速器 PHP 加速器
列表
我倾向于认为,如果你有一台有足够内存的机器,操作系统磁盘缓存在缓存适当的内容方面也会做得很好(如果不是更好的话,因为它不会缓存不使用的文件),但你应该在测试服务器上对它进行基准测试,在验证你实际上是过度访问磁盘(使用 sar)之后。
PHP 最大的问题是,对于每个请求,解释器都必须
使用APC,您可以跳过所有步骤并直接跳转到执行。如果您遇到性能问题,尤其是在观察到您提到的分析结果之后,请安装和配置 APC。您会对获得的性能提升感到惊讶。
我面临着为Howtopedia组织优化大量 wiki 的问题;新闻发布后,他们获得的报纸报道系统性地使系统负载达到 100%。使用仅 25 MB 缓存配置 APC 可将系统负载直接降低到 5% 以下。一些进一步的基本调整到小于 1%。
同时,由于步骤 1-3 所做的大部分工作都是引入延迟,因此用户体验到的响应时间得到了显着改善。
针对您描述的场景的一些进一步提示:
不,如果 RAM 已经是瓶颈就不会了。