尋找導致 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 秒超時是編譯時的預設值,所以我只能說我是猜測的。

相關內容