我正在尝试使用 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/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
你好,我无法成功如何在散列中删除key后释放内存。当我从哈希中删除键时,内存不会释放,也不会在手动调用GC.start后释放。当从Hash中删除键并且这些对象在某处泄漏时,这是预期的行为还是GC不释放内存?如何在Ruby中删除Hash中的键并在内存中取消分配它?例子:irb(main):001:0>`ps-orss=-p#{Process.pid}`.to_i=>4748irb(main):002:0>a={}=>{}irb(main):003:0>1000000.times{|i|a[i]="test#{i}"}=>1000000irb(main):004:0>`ps-orss=-p
一段时间以来,我一直在使用open_uri下拉ftp路径作为数据源,但突然发现我几乎连续不断地收到“530抱歉,允许的最大客户端数(95)已经连接。”我不确定我的代码是否有问题,或者是否是其他人在访问服务器,不幸的是,我无法真正确定谁有问题。本质上,我正在读取FTPURI:defself.read_uri(uri)beginuri=open(uri).readuri=="Error"?nil:urirescueOpenURI::HTTPErrornilendend我猜我需要在这里添加一些额外的错误处理代码...我想确保我采取一切预防措施来关闭所有连接,这样我的连接就不是问题所在,但是我
我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id
我正在为毕业设计开发GEM,TravisCI构建不断失败。这是我在Travis上的链接:https://travis-ci.org/ricardobond/perpetuus/builds/8709218构建错误是:$bundleexecrakerakeaborted!Don'tknowhowtobuildtask'default'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in`eval'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_