Skip to content

Commit

Permalink
"MEMORY/MDL-18540,remove hard-coded php memory limit, added system se…
Browse files Browse the repository at this point in the history
…tting for it, create a function reduce_memory_limit to reduce memroy limit and respect php.ini setting in the meanwhile, merged from 1.9"
  • Loading branch information
dongsheng committed Mar 26, 2009
1 parent add1a6d commit 7022dd3
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 16 deletions.
8 changes: 6 additions & 2 deletions admin/health.php
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,11 @@ function exists() {
}
$oldmemlimit = get_real_size($oldmemlimit);
//now lets change the memory limit to something unique below 128M==134217728
@ini_set('memory_limit', 134217720);
if (empty($CFG->memorylimit)) {
raise_memory_limit('128M');
} else {
raise_memory_limit($CFG->memorylimit);
}
$testmemlimit = get_real_size(@ini_get('memory_limit'));
//verify the change had any effect at all
if ($oldmemlimit == $testmemlimit) {
Expand All @@ -374,7 +378,7 @@ function exists() {
return false;
}
}
@ini_set('memory_limit', $oldmemlimit);
reduce_memory_limit($oldmemlimit);
return false;
}
function severity() {
Expand Down
8 changes: 8 additions & 0 deletions admin/settings/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,14 @@

// "performance" settingpage
$temp = new admin_settingpage('performance', get_string('performance', 'admin'));

$temp->add(new admin_setting_special_selectsetup('memorylimit', get_string('memorylimit', 'admin'),
get_string('configmemorylimit', 'admin'), '128M',
array( '64M' => '64M',
'128M' => '128M',
'256M' => '256M',
'1024M' => '1024M'
)));
$temp->add(new admin_setting_special_selectsetup('cachetype', get_string('cachetype', 'admin'),
get_string('configcachetype', 'admin'), '',
array( '' => get_string('none'),
Expand Down
7 changes: 5 additions & 2 deletions backup/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -547,9 +547,12 @@ function import_backup_file_silently($pathtofile,$destinationcourse,$emptyfirst=
mtrace($debuginfo.'Required function check failed (see backup_required_functions)');
return false;
}

@ini_set("max_execution_time","3000");
raise_memory_limit("192M");
if (empty($CFG->memorylimit)) {
raise_memory_limit('128M');
} else {
raise_memory_limit($CFG->memorylimit);
}

if (!$backup_unique_code = restore_precheck($destinationcourse,$pathtofile,$errorstr,true)) {
mtrace($debuginfo.'Failed restore_precheck (error was '.$errorstr.')');
Expand Down
6 changes: 5 additions & 1 deletion backup/restore.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,11 @@

//Adjust some php variables to the execution of this script
@ini_set("max_execution_time","3000");
raise_memory_limit("192M");
if (empty($CFG->memorylimit)) {
raise_memory_limit('128M');
} else {
raise_memory_limit($CFG->memorylimit);
}

//Call the form, depending the step we are

Expand Down
6 changes: 5 additions & 1 deletion backup/try.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@

//Adjust some php variables to the execution of this script
@ini_set("max_execution_time","3000");
raise_memory_limit("192M");
if (empty($CFG->memorylimit)) {
raise_memory_limit('128M');
} else {
raise_memory_limit($CFG->memorylimit);
}

echo "<pre>\n";

Expand Down
2 changes: 2 additions & 0 deletions lang/en_utf8/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@
$string['configmaxevents'] = 'Events to Lookahead';
$string['configmemcachedhosts'] = 'For memcached. Comma-separated list of hosts that are running the memcached daemon. Use IP addresses to avoid DNS latency. memcached does not behave well if you add/remove hosts on a running setup.';
$string['configmemcachedpconn'] = 'For memcached. Use persistent connections. Use carefully -- it can make Apache/PHP crash after a restart of the memcached daemon.';
$string['configmemorylimit'] = 'This sets the maximum amount of memory that a script is allowed to allocate. This option is applied to search indexing, backup/restore and admin/health scripts.';
$string['configmessaging'] = 'Should the messaging system between site users be enabled?';
$string['configminpassworddigits'] = 'Passwords must have at least these many digits.';
$string['configminpasswordlength'] = 'Passwords must be at least these many characters long.';
Expand Down Expand Up @@ -550,6 +551,7 @@
$string['mediapluginwmv'] = 'Enable .wmv filter';
$string['memcachedhosts'] = 'memcached hosts';
$string['memcachedpconn'] = 'memcached use persistent connections';
$string['memorylimit'] = 'PHP memory limit';
$string['messaging'] = 'Enable messaging system';
$string['minpasswordlength'] = 'Password Length';
$string['minpassworddigits'] = 'Digits';
Expand Down
36 changes: 36 additions & 0 deletions lib/setuplib.php
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,42 @@ function raise_memory_limit($newlimit) {
return false;
}

/**
* Function to reduce the memory limit to a new value.
* Will respect the memory limit if it is lower, 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 reduce_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);
// -1 is smaller, but it means unlimited
if ($new < $cur && $new != -1) {
ini_set('memory_limit', $newlimit);
return true;
}
return false;
}

/**
* Converts numbers like 10M into bytes.
*
Expand Down
17 changes: 7 additions & 10 deletions search/cron_php5.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
*/

try{
// overrides php limits
$maxtimelimit = ini_get('max_execution_time');
ini_set('max_execution_time', 600);
$maxmemoryamount = ini_get('memory_limit');
ini_set('memory_limit', '96M');
ini_set('max_execution_time', 300);
if (empty($CFG->memorylimit)) {
raise_memory_limit('128M');
} else {
raise_memory_limit($CFG->memorylimit);
}

mtrace("\n--DELETE----");
require_once($CFG->dirroot.'/search/delete.php');
Expand All @@ -28,13 +29,9 @@
mtrace("------------");
//mtrace("cron finished.</pre>");
mtrace('done');

// set back normal values for php limits
ini_set('max_execution_time', $maxtimelimit);
ini_set('memory_limit', $maxmemoryamount);
}
catch(Exception $ex){
mtrace('Fatal exception from Lucene subsystem. Search engine may not have been updated.');
mtrace($ex);
}
?>
?>

0 comments on commit 7022dd3

Please sign in to comment.