2016-08-23 93 views
5

我试图通过Uniform Server WAMP包(Apache版本2.4.20,PHP版本7.0.8)自己托管一些网页,其中一个是简单的Bootsrap投资组合另一个是使用WooCommerce和其他插件的基于WordPress的在线商店。WordPress Apache VirtualAlloc和VirtualFree失败,PHP内存不足

有时我的WordPress基于网站停止工作,直到我重新启动Apache服务。我觉得充满了这些错误主要Apache日志:

VirtualAlloc() failed: [0x00000008] Not enough storage is available to process this command. 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 Fatal error: Out of memory (allocated 2097152) (tried to allocate 4096 bytes) in D:\Software\UniServerZ\vhosts\***\wp-includes\pomo\mo.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 

整个源代码可以找到here

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

我增加memory_limit的在php.ini中至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 unable to stat

貌似我加入了这行黑客行为,禁用xmlprc的受害者。 htaccess文件:

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

希望这有助于。

更新2 - 几天后

看起来问题解决了,不时地我发现客户端通过服务器配置错误否认,但网站不再失败。

更新3 - 几个星期后

的VirtualAlloc()和VirtualFree()失败回来,没有任何可疑的脚本请求,日志只是充满提到的失败,我的店数有一堆提到了的内存错误。是否有可能如何使Apache错误更详细/详细,以找出哪些命令会触发没有足够的存储错误,或试图访问哪个无效地址?

更新4 - 几个月后

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

+0

我有这个确切的问题。我能想到的唯一的事情就是Xamppp是32位的,所以无法为生产站点寻址尽可能多的内存。 –

回答

3

不知道这可以帮助,因为WordPress不使用PHP本地会话, ,但可以,一些插件正在使用。

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

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