为什么我用apc随机遇到这个致命错误(在Yii Framework中)?

时间:2011-12-19 06:31:17

标签: php yii apc

我有时遇到

Fatal error: require() [<a href='function.require'>function.require</a>]: apc_fcntl_lock failed errno:6 in C:\web\yii\framework\web\CWebApplication.php on line 345

代码上下文:

        else
            $controllerID.='/';
        $className=ucfirst($id).'Controller';
        $classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php';
        if(is_file($classFile))
        {
            if(!class_exists($className,false))
                require($classFile);  ////////////THIS IS LINE 345
            if(class_exists($className,false) && is_subclass_of($className,'CController'))
            {
                $id[0]=strtolower($id[0]);
                return array(
                    new $className($controllerID.$id,$owner===$this?null:$owner),
                    $this->parseActionParams($route),
                );
            }
            return null;
        }

相对运行时环境:

OS:win2k3.
PHP Version 5.3.6 
Server API  CGI/FastCGI

apc:
Version 3.1.8-dev
APC Debugging   Disabled
MMAP Support    Disabled
Locking type    File Locks
Serialization Support   php
Revision    $Revision: 308812 $
Build Date  Mar 1 2011 13:31:44

导致此错误的原因是什么?我该如何解决?

2 个答案:

答案 0 :(得分:0)

这看起来像是一个APC问题,我也经常遇到这个问题。我无法100%告诉你发生了什么,但是,在开发过程中,你经常更改,移动或覆盖文件。然后,APC似乎松开了文件的inode,该文件在内部用于处理字节码缓存。

对我来说,“修复”错误的唯一方法是重启网络服务器。

在生产系统上是否也会发生这种情况,您不经常更改源代码?

答案 1 :(得分:0)

似乎是apc的死锁错误http://www.searchtb.com/2014/02/apc-lock-php-fpm.html我向其中一位apc维护者询问了这个问题,他建议我使用opcache而不是apc。