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

标签 php wordpress apache

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

我的基于 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 .

与此同时,我的投资组合页面可以正常运行。

我将 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 'D:/Software/UniServerZ/www/xmlrpc.php' not found or unable to stat

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

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

希望这对您有所帮助。

更新 2 - 几天后

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

更新 3 - 几周后

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

更新 4 - 几个月后

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

最佳答案

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

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

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

关于php - WordPress Apache VirtualAlloc 和 VirtualFree 失败,PHP 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39103101/

相关文章:

php - 如何在 Underscores Wordpress 主题中创建第二个侧边栏?

php - 即使 mysql 表中有值,SQL 查询也不会返回值

css - style.css wordpress 模板菜单对齐

.net - 在 linux 和 apache 上的同一个 EC2 中运行多个 dotnet api 的项目

apache - 在 .htaccess 上保留 HTTP 或 HTTPS

apache - 使用 Apache 和 HAProxy 诊断 HTTP 500 错误

php - 这段代码有什么作用?

php - 根据行中字符串的字符长度选择匹配项

css - Firefox 是否仍然需要 "::moz-selection"来更改 wordpress 中的背景文本颜色?

html - 如何使用 <img> 标签而不是 CSS 设置图像背景?