【问题标题】:WordPress Apache VirtualAlloc and VirtualFree failed, PHP out of memoryWordPress Apache VirtualAlloc 和 VirtualFree 失败,PHP 内存不足
【发布时间】:2016-08-23 13:50:42
【问题描述】:

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

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

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

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

[2016 年 8 月 23 日星期二 14:49:59.357235] [:error] [pid 11300:tid 1768] [client 88.119.96.56:52269] PHP 致命错误:内存不足(分配 2097152)(试图分配 4096 字节) 在 D:\Software\UniServerZ\vhosts\***\wp-includes\pomo\mo.php 第 276 行,引用者: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找到。

与此同时,我的作品集页面可以正常工作。

我将 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 失败的地方发现了一条有趣的线:

[2016 年 8 月 23 日星期二 21:02:40.298272] [:error] [pid 504:tid 1836] [client 191.96.249.54:36032] 找不到脚本'D:/Software/UniServerZ/www/xmlrpc.php'或无法统计

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

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

希望这会有所帮助。

更新 2 - 几天后

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

更新 3 - 几周后

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

更新 4 - 几个月后

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

【问题讨论】:

  • 我遇到了这个确切的问题。我唯一能想到的是 Xampp 是 32 位的,因此无法解决生产站点所需的内存。
  • 对我来说也是如此,尽管我有足够的 RAM 空闲和分配。当我升级到 PHP 7 附带的新版本 XAMPP 时发生。还没有能够解决它。我已经联系了我的主题开发者。希望他们能提供帮助。

标签: php wordpress apache


【解决方案1】:

不确定这是否有帮助,因为 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 服务器上同时运行多次相同的脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-04
    • 2020-12-23
    • 2010-11-01
    • 2012-02-09
    • 2011-06-26
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多