问题
我正在尝试诊断我正在开发的 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::
我之前提到的)并增加这个值似乎只是隐藏了文件系统的底层性能问题。
问题
- 是否有任何 XHProf 或 PHP 老手可以确认 PHP 的增加是否会对XHProf
realpath_cache
报告的时间产生任何影响?load::
- 我应该了解 Linux 中哪些可能产生影响的底层缓存机制?
- 与上面相同,但是针对 NFS?