]> git.mjollnir.org Git - moodle.git/commitdiff
raise_memory_limit() earlier -- resolves OOM on 64-bit platforms
authormartinlanghoff <martinlanghoff>
Tue, 26 Dec 2006 22:48:36 +0000 (22:48 +0000)
committermartinlanghoff <martinlanghoff>
Tue, 26 Dec 2006 22:48:36 +0000 (22:48 +0000)
On 64-bit platforms the in-memory footprint of our libraries is quite a bit
larger than usual, and we hit the 8MB default memory limit before we call
raise_memory_limit(). This patch moves raise_memory_limit() and
get_realsize() to setuplib so we can call them earlier, and moves the
call to _before_ we include the libraries.

On AMD64, for MOODLE_17_STABLE the footprint is about 9.5MB. Diet time? :-)

lib/moodlelib.php
lib/setup.php
lib/setuplib.php

index b1860325b5f99d0ce19514c06fbc0a506f5e7047..095d65796d4158a57ff80532c3ad3b1ef8d2ad4f 100644 (file)
@@ -4014,34 +4014,6 @@ function get_directory_size($rootdir, $excludefile='') {
     return $size;
 }
 
-/**
- * Converts numbers like 10M into bytes.
- *
- * @param mixed $size The size to be converted
- * @return mixed
- */
-function get_real_size($size=0) {
-    if (!$size) {
-        return 0;
-    }
-    $scan['MB'] = 1048576;
-    $scan['Mb'] = 1048576;
-    $scan['M'] = 1048576;
-    $scan['m'] = 1048576;
-    $scan['KB'] = 1024;
-    $scan['Kb'] = 1024;
-    $scan['K'] = 1024;
-    $scan['k'] = 1024;
-
-    while (list($key) = each($scan)) {
-        if ((strlen($size)>strlen($key))&&(substr($size, strlen($size) - strlen($key))==$key)) {
-            $size = substr($size, 0, strlen($size) - strlen($key)) * $scan[$key];
-            break;
-        }
-    }
-    return $size;
-}
-
 /**
  * Converts bytes into display form
  *
@@ -4829,43 +4801,6 @@ function document_file($file, $include=true) {
     return false;
 }
 
-/**
- * Function to raise the memory limit to a new value.
- * Will respect the memory limit if it is higher, thus allowing
- * settings in php.ini, apache conf or command line switches
- * to override it
- *
- * The memory limit should be expressed with a string (eg:'64M')
- *
- * @param string $newlimit the new memory limit
- * @return bool
- */
-function raise_memory_limit ($newlimit) {
-
-    if (empty($newlimit)) {
-        return false;
-    }
-
-    $cur = @ini_get('memory_limit');
-    if (empty($cur)) {
-        // if php is compiled without --enable-memory-limits
-        // apparently memory_limit is set to ''
-        $cur=0;
-    } else {
-        if ($cur == -1){
-            return true; // unlimited mem!
-        }
-      $cur = get_real_size($cur);
-    }
-
-    $new = get_real_size($newlimit);
-    if ($new > $cur) {
-        ini_set('memory_limit', $newlimit);
-        return true;
-    }
-    return false;
-}
-
 /// ENCRYPTION  ////////////////////////////////////////////////
 
 /**
index 5e433a73f6c0ce70965290d09451709b7f70e43b..dfecd40dc49a797a524d561792e36d5377e128aa 100644 (file)
@@ -177,9 +177,11 @@ global $HTTPSPAGEREQUIRED;
         $CFG->admin = 'admin';   // This is relative to the wwwroot and dirroot
     }
 
+/// Increase memory limits if possible
+    raise_memory_limit('64M');    // We should never NEED this much but just in case...
 
 /// Load up standard libraries
-    
+
     require_once($CFG->libdir .'/textlib.class.php');   // Functions to handle multibyte strings
     require_once($CFG->libdir .'/weblib.php');          // Functions for producing HTML
     require_once($CFG->libdir .'/dmllib.php');          // Functions to handle DB data (DML)
@@ -188,11 +190,6 @@ global $HTTPSPAGEREQUIRED;
     require_once($CFG->libdir .'/deprecatedlib.php');   // Deprecated functions included for backward compatibility
     require_once($CFG->libdir .'/moodlelib.php');       // Other general-purpose functions
 
-
-/// Increase memory limits if possible
-
-    raise_memory_limit('64M');    // We should never NEED this much but just in case...
-
 /// Disable errors for now - needed for installation when debug enabled in config.php
     if (isset($CFG->debug)) {
         $originalconfigdebug = $CFG->debug;
index 13cd7f50789485aa4ab9f8b5468564acc4fbe94e..ba4bfb9655e8558d276ad30c179c85111199d855 100644 (file)
@@ -31,6 +31,71 @@ function init_performance_info() {
     }
 }
 
+/**
+ * Function to raise the memory limit to a new value.
+ * Will respect the memory limit if it is higher, thus allowing
+ * settings in php.ini, apache conf or command line switches
+ * to override it
+ *
+ * The memory limit should be expressed with a string (eg:'64M')
+ *
+ * @param string $newlimit the new memory limit
+ * @return bool
+ */
+function raise_memory_limit ($newlimit) {
+
+    if (empty($newlimit)) {
+        return false;
+    }
+
+    $cur = @ini_get('memory_limit');
+    if (empty($cur)) {
+        // if php is compiled without --enable-memory-limits
+        // apparently memory_limit is set to ''
+        $cur=0;
+    } else {
+        if ($cur == -1){
+            return true; // unlimited mem!
+        }
+      $cur = get_real_size($cur);
+    }
+
+    $new = get_real_size($newlimit);
+    if ($new > $cur) {
+        ini_set('memory_limit', $newlimit);
+        return true;
+    }
+    return false;
+}
+
+/**
+ * Converts numbers like 10M into bytes.
+ *
+ * @param mixed $size The size to be converted
+ * @return mixed
+ */
+function get_real_size($size=0) {
+    if (!$size) {
+        return 0;
+    }
+    $scan['MB'] = 1048576;
+    $scan['Mb'] = 1048576;
+    $scan['M'] = 1048576;
+    $scan['m'] = 1048576;
+    $scan['KB'] = 1024;
+    $scan['Kb'] = 1024;
+    $scan['K'] = 1024;
+    $scan['k'] = 1024;
+
+    while (list($key) = each($scan)) {
+        if ((strlen($size)>strlen($key))&&(substr($size, strlen($size) - strlen($key))==$key)) {
+            $size = substr($size, 0, strlen($size) - strlen($key)) * $scan[$key];
+            break;
+        }
+    }
+    return $size;
+}
+
 /**
  * Create a directory.
  *