Назад | Перейти на главную страницу

Как автоматически убивать процессы PHP с помощью бесконечных циклов на уровне сервера

У меня есть песочница на моем сервере, где я разрешаю пользователям запускать свои собственные скрипты PHP. Если у PHP-скрипта есть бесконечный цикл, он останавливается только тогда, когда Apache прерывает процесс (30 секунд), что явно не идеально. Я знаю, что некоторые веб-хосты автоматически убивают скрипт PHP, слишком долго потребляющий слишком много ресурсов процессора. Как мне реализовать что-то подобное на уровне сервера в Linux, но без остановки процессов PHP, которые просто занимают много времени (например, с помощью операторов сна или ожидания сетевой задержки)?

И как бонусный вопрос, как мне сделать то же самое с использованием памяти? Я знаю, что PHP имеет встроенные ограничения памяти, но в эту песочницу включено расширение PHP, которое не реализует эти ограничения до тех пор, пока управление не вернется обратно в PHP, и в этот момент, если процесс превысил предел, он был убит, но к тому времени это тоже поздно. Тем временем он мог заменить весь диск подкачки, заставив сервер сканировать.

Вы можете заблокировать его в Apache с помощью RLimitCPU и RLimitMem.

Или вы можете Ренис весь процесс с интервалами от самой ОС.