Revision 24f6b9ed
Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt
SL/Dispatcher.pm | ||
---|---|---|
226 | 226 |
sub handle_all_requests { |
227 | 227 |
my ($self) = @_; |
228 | 228 |
|
229 |
my $restart; |
|
229 | 230 |
my $request = FCGI::Request(); |
230 | 231 |
while ($request->Accept() >= 0) { |
231 | 232 |
$self->handle_request($request); |
232 |
if (_memory_usage_is_too_high()) { |
|
233 |
$request->Flush();
|
|
234 |
last;
|
|
233 |
if (($self->interface_type eq 'FastCGI') && _memory_usage_is_too_high()) {
|
|
234 |
$request->LastCall();
|
|
235 |
$restart = 1;
|
|
235 | 236 |
} |
236 | 237 |
} |
238 |
|
|
239 |
exec $0 if $restart; |
|
237 | 240 |
} |
238 | 241 |
|
239 | 242 |
sub handle_request { |
Auch abrufbar als: Unified diff
Dispatcher: Restart bei hohem Memory-Verbrauch via exec anstelle von exit
Wenn sich das Script im Fall von zu hohem Speicherverbrauch beendet, so
kann es sein, dass der Webserver bereits den nächsten Request zum Script
geschickt hat. Ist das der Fall, kommt es zu einem internal server
error für den User.
Statt dessen kann sich das Script selber ausführen. Dadurch werden die
Kommunikationskanäle zwischen Webserver und Script (STDIN, STDOUT,
STDERR) aufrechterhalten.