Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 24f6b9ed

Von Moritz Bunkus vor mehr als 8 Jahren hinzugefügt

  • ID 24f6b9ed716e385fa26ca68b1d78bd1969b22fcd
  • Vorgänger a680ea0c
  • Nachfolger bcc99615

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.

Unterschiede anzeigen:

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