查找导致 apache 停止运行的进程

查找导致 apache 停止运行的进程

我正在编写一个 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 秒超时是编译时的默认值,所以我只能说我是猜测的。

相关内容