我发现XAMPP v3.3.2
的内存限制设置在PHP
中有一种奇怪的行为。我的计算机已安装Windows 10
,而我已安装8GB of memory
。在我的php.ini
文件中,内存限制设置为1024M
。我还制作了这个基本的php文件进行测试:
<?php
echo ini_get('memory_limit');
exit;
?>
使用不同的命令行参数运行此文件,这些是我得到的输出:
php -d memory_limit=512M test.php
输出 512M
php -d memory_limit=2048M test.php
输出 2048M
php -d memory_limit=4096M test.php
输出以下错误消息:
PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 341351 bytes) in Unknown on line 0
Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 341351 bytes) in Unknown on line 0
php -d memory_limit=5000M test.php
输出 5000M ,但我仍然认为它没有使用5000M的内存(运行了一些扩展测试,这些测试用数字填充数组,并且两个测试都设置了2048M
并设置了5000M
,并以相同的编号和相同的消息退出:
PHP Fatal error: Out of memory (allocated 1457258496) (tried to allocate 134217728 bytes) in C:\xampp\htdocs\test\extended_test.php on line 733
Fatal error: Out of memory (allocated 1457258496) (tried to allocate 134217728 bytes) in C:\xampp\htdocs\test\extended_test.php on line 733
当试图为应该在我的计算机上运行的脚本分配更多内存时,我偶然发现了这一点。任何想法可能是什么原因造成的?
答案 0 :(得分:0)
将ThreadsPerChild从150减小到一个较低的值对我来说解决了它。 但是我无法解释MPM模块中所有设置之间的联系和背景,最后“谁”阻止分配更多的内存。
<IfModule mpm_winnt_module>
ThreadStackSize 8388608
ThreadsPerChild 150 # ← try to decrease this value slightly on "Out of Memory" errors under windows.
MaxConnectionsPerChild 0
</IfModule>