I'm trying to test memory allocation in a php script. I have the limit set to 128M in php.ini. In the script, ini_get('memory_limit') reports 128M as the limit. The problem is, when I start allocating space I can't go beyond 23M. I can restrict memory allocation to any level below 23M but can't allocate more. Just looking for clues as to where this limit is being imposed.
Here's my test script...
<?php
echo "System imposed memory_limit is set to: " . ini_get('memory_limit') . "<br>
";
for ($i=1; $i<1000; $i++) {
$a = loadmem($i);
echo "You have allocated ". $i . "M (". memory_get_usage() . ") memory in this php script" . "<br />
";
unset($a);
}
function loadmem($howmuchmeg) {
$a = str_repeat("0", $howmuchmeg * 1024 * 1024); // alocating 10 chars times million chars
return $a;
}
?>
Here's the output using curl...
System imposed memory_limit is set to: 128M<br>
You have allocated 1M (1403632) memory in this php script<br />
You have allocated 2M (2452232) memory in this php script<br />
You have allocated 3M (3500808) memory in this php script<br />
You have allocated 4M (4549384) memory in this php script<br />
You have allocated 5M (5597960) memory in this php script<br />
You have allocated 6M (6646536) memory in this php script<br />
You have allocated 7M (7695112) memory in this php script<br />
You have allocated 8M (8743688) memory in this php script<br />
You have allocated 9M (9792264) memory in this php script<br />
You have allocated 10M (10840848) memory in this php script<br />
You have allocated 11M (11889424) memory in this php script<br />
You have allocated 12M (12938000) memory in this php script<br />
You have allocated 13M (13986576) memory in this php script<br />
You have allocated 14M (15035152) memory in this php script<br />
You have allocated 15M (16083728) memory in this php script<br />
You have allocated 16M (17132304) memory in this php script<br />
You have allocated 17M (18180880) memory in this php script<br />
You have allocated 18M (19229456) memory in this php script<br />
You have allocated 19M (20278032) memory in this php script<br />
You have allocated 20M (21326608) memory in this php script<br />
You have allocated 21M (22375184) memory in this php script<br />
You have allocated 22M (23423760) memory in this php script<br />
You have allocated 23M (24472336) memory in this php script<br />
Here are the relevant error_log entries...
mmap() failed: [12] Cannot allocate memory
PHP Fatal error: Out of memory (allocated 2097152) (tried to allocate 25165856 bytes)
Using php 7.0.x and apache2.2
The error indicates that you don't actually have that much memory available. If you had simply exceeded the limit, you'd get a slightly different message:
PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried...
Your issue could be a result of actual memory available or a shell-imposed ulimit.
Add this yo yout php script
<?php
ini_set('memory_limit', '2048M');
?>