На Linux-сервере Apache (Ubuntu 14.04 LTS, Apache 2.4.7 с mpm_prefork и mod_php) у меня есть сценарии PHP, который занимает много времени. Они убиты апачем.
У нас есть настройка php (max_execution_time, set_time_limit …)
У нас нет никаких следов в журнале (системный журнал, доступ Apache / журнал ошибок)
Мы проследили процесс apache с помощью strace:
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} ---
попробуй установить ini_set('max_execution_time', -1);
или запустите этот скрипт от имени root, тогда apache его не убьет
Другая возможность — 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();
}
}