PHP 文件加载时间,可能与 NFS 有关?

PHP 文件加载时间,可能与 NFS 有关?

问题

我正在尝试诊断我正在开发的 Drupal 网站上的性能问题。早上,当网站超过 8 小时没有流量(甚至没有运行 cron)时,主页需要大约 3.5 秒才能加载。重新加载页面预计需要 250 毫秒。

这是一个开发网络服务器,安装了相当旧的 PHP 版本(5.3.3)。所有文件都通过 NFS 静态挂载(我认为这是根本原因,下文将详细介绍)。

为了帮助诊断,我安装了XH专业在此开发服务器上,并启用了一个 Drupal 模块,该模块可分析页面加载情况并在可很好地排序的表中显示分析数据。对于那些不熟悉 XHProf 的人来说,它提供了每个调用函数的数据以及诸如总耗时、内存使用情况和该函数的调用情况等信息。

我的发现

在最初的“缓慢”冲击中,PHPfile_exists函数1400毫秒来自 82 次调用,约占总执行时间的 43%。在随后的页面加载中,同一个函数file_exists再次被调用 82 次,但这次调用次数大幅减少到3毫秒仅占总执行时间的1%。

我还查看了 PHP 加载到内存中花费时间最长的文件(我认为这是load::函数名称前缀的意思)。这个 PHP 模板文件花费了惊人的42毫秒第一次加载,并且仅3毫秒在随后的重新加载中!

我的怀疑

我很清楚在某个地方有某种缓存在进行 - 我只是不知道在哪里。PHP 文档文件已存在提到这个函数的输出被缓存了。然后我发现我可以控制此缓存的大小并且它可能应该从默认的 16k 增加到更适合 Drupal(加载大量相关文件)的值。

然而,虽然我认为这会减少花费的时间file_exists,但我不确定这是否会影响 PHP 实际花费的时间加载中文件(load::我之前提到的)并增加这个值似乎只是隐藏了文件系统的底层性能问题。

问题

  1. 是否有任何 XHProf 或 PHP 老手可以确认 PHP 的增加是否会对XHProfrealpath_cache报告的时间产生任何影响?load::
  2. 我应该了解 Linux 中哪些可能产生影响的底层缓存机制?
  3. 与上面相同,但是针对 NFS?

相关内容