Apache убивает долго работающий процесс

На 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} ---

1

Решение

попробуй установить ini_set('max_execution_time', -1);
или запустите этот скрипт от имени root, тогда apache его не убьет

1

Другие решения

Другая возможность — 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();
}
}
0

По вопросам рекламы [email protected]