From: Aaron Schulz Date: Fri, 7 Aug 2015 22:09:22 +0000 (-0700) Subject: Made JobRunner bail more smoothly on near OOM X-Git-Tag: 1.31.0-rc.0~10446^2 X-Git-Url: http://git.cyclocoop.org/%7B%24admin_url%7Dcompta/comptes/journal.php?a=commitdiff_plain;h=9d39f509048641ff533cfcd277cd5aaafb81d986;p=lhc%2Fweb%2Fwiklou.git Made JobRunner bail more smoothly on near OOM * Use the regular limit-X style response instead of throwing an exception. This avoids loss of statd data and the like. Change-Id: Ia08384a0d13c268f6e7a673b2265ab77772e5539 --- diff --git a/includes/jobqueue/JobRunner.php b/includes/jobqueue/JobRunner.php index 3982134b6b..2465e5aed7 100644 --- a/includes/jobqueue/JobRunner.php +++ b/includes/jobqueue/JobRunner.php @@ -263,7 +263,10 @@ class JobRunner implements LoggerAwareInterface { } // Bail if near-OOM instead of in a job - $this->assertMemoryOK(); + if ( !$this->checkMemoryOK() ) { + $response['reached'] = 'memory-limit'; + break; + } } } while ( $job ); // stop when there are no jobs @@ -392,9 +395,9 @@ class JobRunner implements LoggerAwareInterface { /** * Make sure that this script is not too close to the memory usage limit. * It is better to die in between jobs than OOM right in the middle of one. - * @throws MWException + * @return bool */ - private function assertMemoryOK() { + private function checkMemoryOK() { static $maxBytes = null; if ( $maxBytes === null ) { $m = array(); @@ -408,8 +411,14 @@ class JobRunner implements LoggerAwareInterface { } $usedBytes = memory_get_usage(); if ( $maxBytes && $usedBytes >= 0.95 * $maxBytes ) { - throw new MWException( "Detected excessive memory usage ($usedBytes/$maxBytes)." ); + $msg = "Detected excessive memory usage ($usedBytes/$maxBytes)."; + $this->debugCallback( $msg ); + $this->logger->error( $msg ); + + return false; } + + return true; } /**