I want to introduce extra logging into our application to log when a supervisor (or master) runs out of memory. I was struggling to get these events to fire despite lowering the memory limits to very small amounts.
From my testing it turns out that the $master->terminate(12); call will eventually call exitProcess on the Supervisor which calls to the system exit function. This means that the PHP process ends immediately and the line which raises the event is never hit.
Terminate calls exit
exit in turn calls exitProcess
Solution
The solution seems to be simply raising the event before terminating the process.
Other issues
It is also worth raising that the $supervisor instance isn't serialisable as it holds a reference to a Process instance. This meant that my first attempt to handle these events on a queue failed.
Problem
I want to introduce extra logging into our application to log when a supervisor (or master) runs out of memory. I was struggling to get these events to fire despite lowering the memory limits to very small amounts.
From my testing it turns out that the
$master->terminate(12);
call will eventually callexitProcess
on theSupervisor
which calls to the systemexit
function. This means that the PHP process ends immediately and the line which raises the event is never hit.Terminate calls exit
exit in turn calls exitProcess
Solution
The solution seems to be simply raising the event before terminating the process.
Other issues
It is also worth raising that the
$supervisor
instance isn't serialisable as it holds a reference to aProcess
instance. This meant that my first attempt to handle these events on a queue failed.