假设我们有一个简单的index.php文件:
<?php inclde('file1.php'); inclde('file2.php'); inclde('file3.php');
据推测,这将最终导致另外三个单独的I / O请求到磁盘上,当index.php文件被提供之上。
现在,假设这个文件被放置在一个网站上并经常请求。 如果这些文件以某种方式caching在内存中,而不是每次有人访问该网站时发出I / O请求,这都是有意义的。
问题:
- Apache的httpdcaching
index.php吗?
- 那么3个
include()操作呢?
- PHP是否通过Apache从OS请求文件? 使用哪种mpm模型有没有关系?
- nginx,lighttpd或任何其他networking服务器做caching吗?
- 这是否也取决于操作系统文件系统? 即Linux操作系统通常会caching经常访问的文件?
- 还是有一个更低级别的caching?
- 还是PHP或任何其他服务器应用程序引擎以某种方式caching文件和I / O请求永远不会到OS?
由于磁盘I / O通常是最大的瓶颈,因此了解如何通过Web服务器在各个级别caching文件可以帮助调整性能,甚至是应用程序开发,例如可能连接短的应用程序文件而不是多个包括帮助性能。
感谢您的帮助!
操作系统具有文件系统caching,caching读/写请求到实际的硬件设备。
然后到具体的问题:
- Apache不做caching。
- include()函数不会在默认的PHP安装中进行caching。 如果你像APC,Xcache或OPCache一样安装一个OPCodecaching,那么它将在内存中caching代码的编译版本。
- 文件系统访问通过OS文件系统调用来完成。
- 他们做任何caching都没有好处,所以他们不这样做。 文件系统caching足够用于静态文件caching,任何dynamic语言都有更好的caching选项。
- Linux VFS层执行caching,所以不是由文件系统完成的。
- 硬盘本身也有一些caching,但是在这一层上的好处并不大,因为它没有任何有利于caching的数据结构的信息。
- 是的,在回答#2中提到了正确的OPcodecaching。
是的,如果它有足够的RAM,Linux的文件系统将caching这些文件。 所有其他层依靠FScaching。
可能会有更高级别的caching来caching网站的生成输出,但是这必须使用适当的模块(如APC)进行专门configuration。