
저는 PHP 웹 페이지를 프로그래밍하고 있는데 내 컴퓨터에서 이상한 동작이 보이기 시작했습니다. 어떤 시점에서 apache/php가 브라우저에 웹 페이지를 표시하는 데 시간이 오래 걸립니다(8초). 처음에는 내 응용 프로그램이 그런 줄 알았습니다. 버그가 있어서 스크립트를 완료하는 데 필요한 시간을 추적하기 위해 디버그 기능을 만들었지만 페이지를 여러 번 다시 로드하기 시작했을 때(F5 키를 누름) 그것이 내 스크립트가 아니라 아파치를 지연시키는 다른 프로세스라는 것을 알았습니다( 또는 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초의 시간 제한이 컴파일된 기본값이라고 주장하므로 이에 대해 추측하고 있다고만 말할 수 있습니다.