我试图在我正在开发的Drupal网站上诊断性能问题。 在早上,当网站超过8小时没有stream量(甚至没有cron运行),首页需要大约3.5秒的时间加载。 重新加载页面需要250ms。
这是一个开发Web服务器,安装了相当旧的PHP版本(5.3.3)。 所有的文件都通过NFS静态挂载 (我相信这是根本原因,更多的在下面)。
为了帮助诊断,我在此开发服务器上安装了XHProf ,并启用了一个Drupal模块,用于configuration页面加载并将分析数据显示在一个很好的可sorting表格中。 对于那些不熟悉XHProf的人来说,它提供了每一个被调用的函数的数据,以及诸如花费的总时间,内存使用量以及对这个函数的调用等。
在最初的“慢”命中,PHP函数file_exists从82个调用中花费1400ms ,占总执行时间的大约43%。 在随后的页面加载中,相同的函数file_exists再次被调用了82次,但是这一次仅仅是3ms ,仅占总执行时间的1%。
我另外看了PHP花费最长时间加载到内存中的文件(这是我认为load:: prefix表示函数名)。 这个PHP模板文件花了高达42毫秒来加载第一次,只有3ms在随后的重新加载!
对我来说很清楚,某处存在某种caching – 我只是不知道在哪里。 file_exists的PHP文档提到这个函数的输出被caching了。 然后我发现我可以控制这个caching的大小,它应该从默认的16k增加到更适合Drupal(加载相关文件吨)的东西。
但是,虽然我认为这会减less花费在file_exists的时间,但我不确定这会影响PHP实际加载文件的时间( load::我之前提到过),增加这个值似乎只是隐藏文件系统的基本性能问题。
realpath_cache是否对load:: from XHProf报告的时间有任何影响?