我几个月来一直在和这个问题作斗争。我有两个不同的系统,每个系统都有不同的设置和PHP代码,但两者都有完全相同的问题。
我的服务器将抛出500错误,日志将填充内存分配问题,直到重新启动Apache。
系统ONE
操作系统:Windows Server 2008
XAMPP:PHP 7.1.9 / Apache 2.4.27
代码库:一个小小的laravel网站没有什么花哨的
系统二
操作系统:Windows Server 2016
XAMPP:PHP 7.2.3.0 / Apache 2.4.29
Codebase:一些长时间运行的php进程,大约2分钟。
Apache错误
VirtualFree()失败:[0x000001e7]尝试访问无效地址。 VirtualAlloc()失败:[0x00000008]没有足够的存储空间可用于处理此命令。 VirtualFree()失败:[0x000001e7]尝试访问无效地址。
PHP错误
[Mon May 21 09:27:42.078308 2018] [php7:error] [pid 10236:tid 12736] [client 43.245.8.13:1553] PHP致命错误:内存不足(已分配2097152)(试图分配6626884在第141行的C:\ xampp \ htdocs \ * \ vendor \ doctrine \ dbal \ lib \ Doctrine \ DBAL \ Driver \ PDOStatement.php中,引用:http://m.facebook.com/
[Mon May 21 09:28:12.703338 2018] [php7:error] [pid 10236:tid 12736] [client 122.170.190.70:63513] PHP致命错误:内存不足(已分配73400320)(试图分配4096)第294行的C:\ xampp \ htdocs \ * \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php
[Mon May 21 09:28:14.640812 2018] [php7:error] [pid 10236:tid 12736] [client 122.170.190.70:63529] PHP致命错误:内存不足(已分配37748736)(试图分配4096)第294行的C:\ xampp \ htdocs \ * \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php
[Mon May 21 09:28:19.218972 2018] [php7:error] [pid 10236:tid 12736] [client 157.49.220.122:64984] PHP致命错误:内存不足(已分配20971520)(试图分配4096)在第161行的C:\ xampp \ htdocs \ * \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Concerns \ HasEvents.php中,引用:https://www.facebook.com/
[Mon May 21 09:28:27.125182 2018] [php7:error] [pid 10236:tid 12704] [client 150.143.104.159:12178] PHP致命错误:内存不足(已分配12582912)(试图分配131072)第141行的C:\ xampp \ htdocs \ * \ vendor \ doctrine \ dbal \ lib \ Doctrine \ DBAL \ Driver \ PDOStatement.php
[Mon May 21 09:28:27.125182 2018] [php7:error] [pid 10236:tid 12704] [client 150.143.104.159:12178] PHP致命错误:内存不足(已分配12582912)(试图分配32768)在第451行的C:\ xampp \ htdocs \ * \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Exceptions \ Handler.php
[Mon May 21 09:28:27.125182 2018] [php7:error] [pid 10236:tid 12704] [client 150.143.104.159:12178] PHP致命错误:内存不足(已分配12582912)(试图分配20480)在第0行的未知中
触发错误的原因
错误似乎是随机发生的,但在Apache重新启动后不会立即发生。然而,好像它的占用内存,我在服务器上有6GB的8GB空闲。
到目前为止我尝试了什么
各种php.ini内存调整,例如memory_limit=1200M
以及脚本调整ini_set('memory_limit', -1);
Apache配置调整
ThreadStackSize 56*1024*1024
ThreadsPerChild 150
MaxConnectionsPerChild 0
RLimitMEM 99999999999 99999999999999
但是,重启后我注意到了
AH00118: RLimitMEM not supported on this platform
我看到这些错误散布在互联网上,似乎没有人为他们找到解决方案。我在Windows上需要PHP,我开始认为我应该尝试IIS。
Apache配置上还有其他建议吗?我还可以尝试其他什么?