我正在编写一个 PHP 网页,我开始在我的计算机上看到一些奇怪的行为,在某些时候 apache / php 需要很长时间才能在浏览器上显示网页(8 秒),首先我认为这是我的应用程序有一个bug,所以我做了一个调试函数来跟踪完成脚本所需的时间,但是当我开始多次重新加载页面(按 F5)时,我注意到这不是我的脚本,而是其他一些进程使 apache 停顿(或 php 或 mysql),然后释放它,因为按几次 F5 显示有时脚本完成得很快,有时则需要很多时间:
[time_start] => Array
(
[0] => 1446841239.1471
[1] => 0.0581
[2] => 0.0589
[3] => 0.0564
[4] => 8.0531
[5] => 0.0574
[6] => 0.0621
[7] => 8.0582
[8] => 0.0548
[9] => 8.0457
[10] => 0.0755
[11] => 8.0555
[12] => 0.0512
[13] => 8.0447
[14] => 0.062
[15] => 8.0905
[16] => 0.0602
[17] => 8.0556
[18] => 0.0582
[19] => 8.0492
[20] => 0.0551
)
每个步骤都是按 F5 后运行的相同脚本,并且应该始终花费相同的时间,但有时需要 8 秒才能完成,这让我很烦恼,因为当它停止时,它总是需要大约 8 秒
所以问题是,关于如何找到阻止我的脚本的进程有什么想法吗?
Ps.-我在前台运行了很多东西,因为它是我的个人计算机,但即使我只使用浏览器而没有运行其他应用程序,它仍然挂起,所以它必须是在后台运行的东西,我怎样才能找到它?
答案1
一致的 8 秒意味着某些可能长时间运行的过程设置了超时。在不知道 PHP 代码的作用的情况下,我会猜测您已经获得了 DNS 时间。如果 PHP 正在执行一些网络 I/O 或其他操作,它可能会触发 DNS 查找。每隔一段时间,您就会看到 DNS 查询超时,而 PHP 会继续执行它在这种情况下所做的任何事情。
我唯一能看到 DNS 超时设置的地方是在 中/etc/resolv.conf
,或者可能是resolver(3)
在编译 GNU libc 中的代码时。不幸的是,手册页resolv.conf
声称 5 秒超时是编译时的默认值,所以我只能说我是猜测的。