WordPress Apache VirtualAlloc和VirtualFree失败,PHP内存不足

时间:2016-08-23 13:50:43

标签: php wordpress apache

我正在尝试使用Uniform Server WAMP包(Apache版本2.4.20,PHP版本7.0.8)自己托管一些网页,其中一个是简单的Bootsrap投资组合,另一个是基于WordPress的在线商店使用WooCommerce和其他插件。

在我重新启动Apache服务之前,基于WordPress的站点会不时停止工作。我发现主要的Apache日志充满了这些错误:

  

VirtualAlloc()失败:[0x00000008]没有足够的存储空间可用于处理此命令。   VirtualFree()失败:[0x000001e7]尝试访问无效地址。

我的商店Apache错误日志充满了这些:

  

[Tue Aug 23 14:49:59.357235 2016] [:error] [pid 11300:tid 1768] [client 88.119.96.56:52269] PHP致命错误:内存不足(已分配2097152)(试图分配4096字节) )在第276行的D:\ Software \ UniServerZ \ vhosts \ *** \ wp-includes \ pomo \ mo.php,referer:http://***/wp-admin/edit.php?post_type = shop_order < / p>

行分别为268,270和276,而在mo.php中,它们看起来像这样:

$entry = new Translation_Entry(); // 268
...
$parts = explode(chr(4), $original); // 270
...
$parts = explode(chr(0), $original); // 276

可以找到整个源代码here

与此同时,我的投资组合页面没有问题。

我将 php.ini 中的memory_limit增加到2048MB,将define('WP_MEMORY_LIMIT', '256M');define('WP_MAX_MEMORY_LIMIT', '512M');添加到 wp-config.php ,但至少仍然如此一周两次我的网站无法访问,并记录了上面提到的消息。

我的网站没有产生大量流量,服务器有16GB内存和半空512GB SSD,请帮助我理解或找出导致问题的原因,因为当前的日志对我来说很少。

更新1

我在VirtualAlloc和VirtualFree上面找到了一条有趣的线路:

  

[Tue Aug 23 21:02:40.298272 2016] [:error] [pid 504:tid 1836] [client 191.96.249.54:36032] script&#39; D:/Software/UniServerZ/www/xmlrpc.php& #39;未找到或无法统计

看起来我是黑客攻击的受害者,通过将这些行添加到.htaccess文件来禁用xmlprc:

<Files "xmlrpc.php">
Order Allow,Deny
Deny from all
</Files>

希望这有帮助。

更新2 - 几天后

看起来问题已经解决,我不时发现服务器配置错误导致客户端被拒绝,但网站不再失败。

更新3 - 几周后

VirtualAlloc()和VirtualFree()失败回来了,没有任何可疑的脚本请求,日志只是提到了失败,我的商店日志有一堆提到的内存不足错误。有可能某些人如何使Apache错误更加详细/详细,以确定哪个命令触发了足够的存储错误,或者尝试访问了哪个无效地址?

更新4 - 几个月后

经过一段时间的常规网站使用并且不时重新启动Apache,错误就停止了,我怀疑一些使用过的插件已经更新,现在内存没有泄漏,一切正常,直到下一个错误......

1 个答案:

答案 0 :(得分:3)

不确定这可以帮助,因为WordPress不使用PHP本机会话, 但可以,有些插件正在使用。

我的情况: Windows操作系统,PHP 7.0.6 - 7.0.11
由于php会话使用,VirtuaAlloc失败。 http://php.net/manual/en/features.sessions.php 我已经删除/替换了所有的php session_函数。

如何重现: 在session_start(); 解析一些巨大的xml(150MB或更多)文件 在Apache服务器上同时运行多次相同的脚本。