Apache杀死了很长时间的运行过程

时间:2014-10-01 15:16:20

标签: php apache ubuntu-14.04 sigkill mod-php

在linux apache服务器上(ubuntu 14.04 lts,带有mpm_prefork和mod_php的apache 2.4.7)我有PHP脚本需要很长时间。这些都是被apache杀死的。

我们调整了php设置(max_execution_time,set_time_limit ...)

我们在日志中没有任何跟踪(syslog,apache访问/错误日志)

我们用strace跟踪了apache进程:

2172 is the script process
1939 is the apache main process
....

2172  14:53:01 +++ killed by SIGKILL +++
1939  14:53:01 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=2172, si_status=SIGKILL, si_utime=3067, si_stime=38} ---

2 个答案:

答案 0 :(得分:1)

尝试设置ini_set('max_execution_time', -1); 或以root身份运行此脚本,然后apache不会杀死他

答案 1 :(得分:0)

另一种可能性是Apache2正在杀死该进程,因为它在一段时间内没有发回任何东西。这通常发生在共享主机上。如果您正在使用输出缓冲,请将其关闭。然后经常打印出来并立即使用flush()将信息发送回Apache。

例如;在最长的循环中,您可以执行以下操作:

$time = time();
while($looping) {
  ... Code here ...
  if(time() > $time) {
    echo '.';
    flush();
    //ob_flush();//If you're using output buffering (often on by default)
    $time = time();
  }
}