【问题标题】:PHP Fatal error: Failure in wincache (windows azure)PHP致命错误:wincache失败(windows azure)
【发布时间】:2015-04-24 16:32:57
【问题描述】:

我的项目中有 codeigniter 框架。我的网站在 Windows azure 平台上运行。有时它会给我这个错误:

PHP 致命错误:Wincache 失败[6484] free_memory:块 0x41d56d8 未使用 在 D:\home\site\wwwroot\system\libraries\Log.php 第 44 行

我尝试通过更改内存值来更改 php.ini 文件:

ini_set('memory_limit','2048M');

但是,在我检查了memory_get_peak_usage(); 之后,我发现应用程序甚至没有使用超过1MB。我不知道这里发生了什么。发生这种情况时,我会出现空白页面并且网站关闭。

如果您需要更多信息或代码,请询问我。

Log.php:

public function __construct()
{
    $config =& get_config();

    $this->_log_path = ($config['log_path'] != '') ? $config['log_path'] : APPPATH.'logs/';

    if ( ! is_dir($this->_log_path) OR ! is_really_writable($this->_log_path)) // This is line 44.
    {
        $this->_enabled = FALSE;
    }

    if (is_numeric($config['log_threshold']))
    {
        $this->_threshold = $config['log_threshold'];
    }

    if ($config['log_date_format'] != '')
    {
        $this->_date_fmt = $config['log_date_format'];
    }
}

log.php 文件是默认的 codeigniter 文件。

最终解决方案:

我已经用这个更新了我的php.ini 文件:

wincache.fcenabled=0
wincache.ocenabled=0
wincache.ucenabled=0
wincache.reroute_enabled = 0
wincache.srwlocks = 0

【问题讨论】:

  • 您使用的是什么网络服务器,Apache、IIS 还是其他? D:\home\site\wwwroot\system\libraries\Log.php 文件的第 44 行是什么?
  • 这表明 WinCache 试图在跨进程共享内存段中双重释放内存块。
  • @RolandoIsidoro:我使用的是 Windows azure。我已经更新了我的问题。
  • 您提到有时会发生致命错误。您是否找出可能导致它的可能操作?就像请求特定页面一样。

标签: php codeigniter azure


【解决方案1】:

这是 Windows Server 上的 IIS 或 WinCache 的问题。您可以在 iis 论坛上关注official thread。 为了确定,请检查 php.ini 中的以下选项:

wincache.reroute_enabled = 0
wincache.srwlocks = 0

还将 wincache 更新到最新版本。

【讨论】:

  • 我已经更新了 php.ini 文件。现在,我需要等待下一次失败。因为它只是偶尔发生。以前不会这样。你能解释一下这个错误是什么,可能的原因是什么?
  • @RonakPatel 更新到 1.3.7 后,重新路由功能功能已启用。它在导致死锁的文件操作中出错。因此,您的记录器有时会停止,并且客户端会收到 500 http 错误。
  • 我是关于php_wincache.dll的版本
【解决方案2】:

从 WinCache 1.3.7.5 开始,特定的 WinCache 错误消息已被删除,这是在最近的 Azure Web 服务更新中推出的。

关于错误信息的含义:当试图释放跨进程共享内存段中的一块内存时,WinCache检测到该块已经被释放。该消息表明 WinCache 检测到问题,并避免损坏内存。该消息实际上应该是警告级别的消息。此外,执行请求应该运行完成,并且应该向客户返回响应。

在 WinCache 1.3.7.4 之前,WinCache 没有没有检测到这种情况,最终会破坏内存,最终导致 AV。因此,错误消息实际上表明 WinCache 刚刚使您免于崩溃,不客气!

【讨论】:

  • 是的。我只是收到通知。 :)
猜你喜欢
  • 1970-01-01
  • 2014-05-09
  • 2014-04-27
  • 1970-01-01
  • 2014-04-29
  • 2018-10-15
  • 2015-11-05
  • 2018-06-17
相关资源
最近更新 更多