Linux,Apache HTTPD或PHPcaching频繁/最近访问的文件?

假设我们有一个简单的index.php文件:

 <?php inclde('file1.php'); inclde('file2.php'); inclde('file3.php'); 

据推测,这将最终导致另外三个单独的I / O请求到磁盘上,当index.php文件被提供之上。

现在,假设这个文件被放置在一个网站上并经常请求。 如果这些文件以某种方式caching在内存中,而不是每次有人访问该网站时发出I / O请求,这都是有意义的。

问题:

  1. Apache的httpdcachingindex.php吗?
  2. 那么3个include()操作呢?
  3. PHP是否通过Apache从OS请求文件? 使用哪种mpm模型有没有关系?
  4. nginx,lighttpd或任何其他networking服务器做caching吗?
  5. 这是否也取决于操作系统文件系统? 即Linux操作系统通常会caching经常访问的文件?
  6. 还是有一个更低级别的caching?
  7. 还是PHP或任何其他服务器应用程序引擎以某种方式caching文件和I / O请求永远不会到OS?

由于磁盘I / O通常是最大的瓶颈,因此了解如何通过Web服务器在各个级别caching文件可以帮助调整性能,甚至是应用程序开发,例如可能连接短的应用程序文件而不是多个包括帮助性能。

感谢您的帮助!

操作系统具有文件系统caching,caching读/写请求到实际的硬件设备。

然后到具体的问题:

  1. Apache不做caching。
  2. include()函数不会在默认的PHP安装中进行caching。 如果你像APC,Xcache或OPCache一样安装一个OPCodecaching,那么它将在内存中caching代码的编译版本。
  3. 文件系统访问通过OS文件系统调用来完成。
  4. 他们做任何caching都没有好处,所以他们不这样做。 文件系统caching足够用于静态文件caching,任何dynamic语言都有更好的caching选项。
  5. Linux VFS层执行caching,所以不是由文件系统完成的。
  6. 硬盘本身也有一些caching,但是在这一层上的好处并不大,因为它没有任何有利于caching的数据结构的信息。
  7. 是的,在回答#2中提到了正确的OPcodecaching。

是的,如果它有足够的RAM,Linux的文件系统将caching这些文件。 所有其他层依靠FScaching。

可能会有更高级别的caching来caching网站的生成输出,但是这必须使用适当的模块(如APC)进行专门configuration。