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


WordPress Apache VirtualAlloc and VirtualFree failed, PHP out of memory

我试图自己使用统一服务器WAMP包(Apache版本2.4.20,PHP版本7.0.8)托管几个网页,其中一个是简单的bootstrap投资组合,另一个是使用WooCommerce和其他插件的基于WordPress的在线商店。

时不时我的WordPress网站停止工作,直到我重新启动Apache服务。我发现Apache主日志中充满了这些错误:

VirtualAlloc() failed: [0x00000008]没有足够的存储空间来处理此命令。VirtualFree() failed: [0x000001e7] Attempt to access invalid address.

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

[Tue Aug 23 14:49:59.357235 2016] [:error] [pid 11300:tid 1768] [client 88.119.96.56:52269] PHP在D:'Software'UniServerZ'vhosts'***'wp-includes'pomo' moo . PHP on line 276, referer: http://***/wp-admin/edit.php?post_type=shop_order

行不同于268、270和276行,在mo.php中它们看起来像这样:

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

完整的源代码可以在这里找到。

在此期间,我的作品集页面工作没有问题。

我将php.ini中的memory_limit增加到2048MB,将define('WP_MEMORY_LIMIT', '256M');define('WP_MAX_MEMORY_LIMIT', '512M');添加到wp-config.php,但每周至少两次我的网站无法访问并且日志中充满了上述消息。

我的网站没有产生太多的流量,服务器有16GB的RAM和半空的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 'D:/Software/UniServerZ/www/xmlrpc.php' not found or cannot stat

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

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

希望对你有帮助。

更新2 -几天后

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

更新3 -几周后

VirtualAlloc()和VirtualFree()失败回来了,没有任何可疑的脚本请求,日志只是充满了提到的失败,我的商店日志有一堆提到的内存错误。是否有可能通过某种方式使Apache错误更加详细/详细,以确定是什么命令触发了存储不足的错误,或者试图访问什么无效地址?

更新4 -几个月后

经过一段时间的定期网站使用和重新启动Apache不时的错误刚刚停止,我怀疑一些使用的插件已经更新,现在内存不泄漏,一切工作,直到下一个错误…

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

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

Howto繁殖:session_start ();解析一些巨大的xml (150MB或更多)文件

在Apache服务器上运行多个相同的脚本