PHP 스크립트가 시간을 초과하여 내 서버를 죽이지 않도록합니다.
문제
원인은 아마도 디스크 공간이 부족하여 모든 것이 이상하게 작동했기 때문일 것입니다. 다른 사람이 비슷한 문제가있는 경우 어쨌든이 질문을 떠날 것입니다.
나는 오랫동안 매달린 몇 가지 PHP 스크립트를 가지고 있지만, 그들이 죽이지 않을 때 실제로 많은 CPU 시간을 사용하지 않는 것 같습니다. 여전히 그들은 LightTPD가 이미 최대 양의 PHP 프로세스를 생성하는 것을 불가능하게 만들고 있습니다.
스크립트가 실행할 수있는 최대 CPU 시간을 제어하기 위해 함수로 사용하거나 php.ini에 넣을 수있는 set_time_limit을 알고 있습니다. 내가 원하는 것은 CPU 시간이 아니라 시계 시간이 아니라 내 웹 서버 (LightTPD)에서 실행하는 모든 PHP 스크립트를 제한하는 것입니다.
중요한 경우, 이것은 내 LightTPD 구성 파일의 PHP 부분입니다.
fastcgi.server = (".php" => ((
"bin-path" => "/opt/local/bin/php5-cgi",
"socket" => "/tmp/php.socket" + var.PID,
"min-procs" => 16,
"max-procs" => 16,
"idle-timeout" => 15,
)))
다음은 LightTPD의 서버 스테이터입니다. PHP가 내가 협상 한 것보다 훨씬 오래 실행되었고 서버가 막히게되었음을 알 수 있습니다. 이상하게도 Max Proc보다 PHP Procs가 더 많습니다.
legend
. = connect, C = close, E = hard error
r = read, R = read-POST, W = write, h = handle-request
q = request-start, Q = request-end
s = response-start, S = response-end
388 connections
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhrhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhrhhhhhhhhhhhhhhhhhhhhhhhhrhhhhhhhhhhh
hhhhrhhhhhhhhhhrhrhhhrrhrhhhhhrhhhrhhhhhhrhhhrrrhr
rrhrrrhrhhhhrrhrrhhrrhrrhrrrrrrrrrrrrh
Connections
Client IP: Read: Written: State: Time: Host: URI: File:
204.16.33.51 0/0 0/0 handle-req 1361 ... (a PHP script)
204.16.33.46 0/0 0/0 handle-req 1420 ... (another PHP script)
... gazillion lines removed ...
끊임없이 보모를 할 필요가없는 구성을 설정하는 데 도움이되는 아이디어는 크게 감사 할 것입니다!
해결책
php.ini 파일을 편집하고 권한을 설정하는 것이 가장 좋습니다.
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 32M ; Maximum amount of memory a script may consume (8MB)
다른 팁
LightTPD에서 그렇게 할 수 있는지 잘 모르겠습니다. 그러나 "스피너"스크립트를 설정하여 주기적으로 매달린 프로세스를 확인하고 죽일 수 있습니다.
제휴하지 않습니다 StackOverflow