
我正在編寫一個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 秒超時是編譯時的預設值,所以我只能說我是猜測的。