1

当我们使用app_dev.php页面(开发版)时,没有任何问题,一切正常。

但是当我们尝试访问 app.php 页面时,有些页面往往会导致 Apache 崩溃。

这是我们的配置:

  • Debian 6 x64 内核 3.2.13
  • 阿帕奇 2.2.22
  • PHP 5.3.3-7+squeeze13 扩展:pdo / pdo_mysql / pdo_pgsql / pdo_sqlite / intl / apc / gd

核心转储给我们以下结果:

#0  0x00007feab144e556 in zend_std_read_property (object=0x3, member=0x7feaa30ab840, type=3) at /tmp/buildd/php5-5.3.3/Zend/zend_object_handlers.c:340
#1  0x00007feab1463604 in zend_fetch_property_address_read_helper_SPEC_VAR_CONST (type=3, execute_data=0x7feab5cf5eb0) at /tmp/buildd/php5-5.3.3/Zend/zend_vm_execute.h:10084
#2  0x00007feab1453570 in execute (op_array=0x7feab5c863d8) at /tmp/buildd/php5-5.3.3/Zend/zend_vm_execute.h:107
#3  0x00007feab1420ef4 in zend_call_function (fci=0x7fff2689bfb0, fci_cache=0x0) at /tmp/buildd/php5-5.3.3/Zend/zend_execute_API.c:963
#4  0x00007feab1442047 in zend_call_method (object_pp=0x7fff2689c0d8, obj_ce=0x7feab63ea400, fn_proxy=0x7fff2689c0e8, function_name=0x7feab181e556 "__destruct", 
    function_name_len=646561136, retval_ptr_ptr=0x0, param_count=-1320891466, arg1=0x7fea00000000, arg2=0x0) at /tmp/buildd/php5-5.3.3/Zend/zend_interfaces.c:97

关于第一帧的更多细节:

#0  0x00007feab144e556 in zend_std_read_property (object=0x3, member=0x7feaa30ab840, type=3) at /tmp/buildd/php5-5.3.3/Zend/zend_object_handlers.c:340
340     property_info = zend_get_property_info(zobj->ce, member, (zobj->ce->__get != NULL) TSRMLS_CC);

发送的第一个参数 zobj->ce = 0x3 似乎很可疑,所以我查看了 zobj 的内容:

(gdb) p *zobj
$3 = {ce = 0xa5935461f887fe37, properties = 0xa5935461f8e5bbb7, guards = 0x0}

但是包含 zobj->ce 的是什么?

(gdb) p *(zobj->ce)
Cannot access memory at address 0xa5935461f887fe37

这个地址似乎导致了无效的内存位置。令人不安的是,这个问题只在使用 Symfony2 应用程序的生产版本时才会出现。这可能表明 APC 或仅使用生产版本加载的另一个模块存在问题,但我们没有发现可能导致此问题的线索。

我们尝试重新安装我们已安装的大多数 PHP 扩展,但在那之前没有任何结果。

编辑:根据需要,这里是 app.php 代码,它是 Symfony2 附带的原始文件。不过,我真的不相信这是问题的原因。

header('P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT');

require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
//require_once __DIR__.'/../app/AppCache.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);
$kernel->handle(Request::createFromGlobals())->send();
4

0 回答 0