我在PHP 5.3.6中遇到了令人讨厌的段错误(从源代码编译,Slackware 13.1 x86,Linode中的VPS)。它发生在apache和nginx(fpm)中。最后成功获得核心转储:
0 0x083db383 in _zval_ptr_dtor ()
1 0x083f3c45 in zend_hash_destroy ()
2 0x083e6fba in _zval_dtor_func ()
3 0x083da69a in _zval_dtor ()
4 0x083db3df in _zval_ptr_dtor ()
5 0x083f3c45 in zend_hash_destroy ()
6 0x083e6fba in _zval_dtor_func ()
7 0x083da69a in _zval_dtor ()
8 0x083db3df in _zval_ptr_dtor ()
9 0x083f3c45 in zend_hash_destroy ()
10 0x08406091 in zend_object_std_dtor ()
11 0x0840632e in zend_objects_free_object_storage ()
12 0x0840a44c in zend_objects_store_del_ref_by_handle_ex ()
13 0x0840a23b in zend_objects_store_del_ref ()
14 0x083e6fe1 in _zval_dtor_func ()
15 0x083da69a in _zval_dtor ()
16 0x083db3df in _zval_ptr_dtor ()
17 0x083f3c45 in zend_hash_destroy ()
18 0x08406091 in zend_object_std_dtor ()
19 0x0840632e in zend_objects_free_object_storage ()
20 0x0840a44c in zend_objects_store_del_ref_by_handle_ex ()
21 0x0840a23b in zend_objects_store_del_ref ()
22 0x083e6fe1 in _zval_dtor_func ()
23 0x083da69a in _zval_dtor ()
24 0x083db3df in _zval_ptr_dtor ()
25 0x083f3c45 in zend_hash_destroy ()
26 0x083e6fba in _zval_dtor_func ()
27 0x083da69a in _zval_dtor ()
28 0x083daed6 in shutdown_executor ()
29 0x083e86c8 in zend_deactivate ()
30 0x0838ebad in php_request_shutdown ()
31 0x084a3f26 in main ()
我正在使用memcache,apc和mongo扩展(从源代码编译)。我试过禁用apc,但没有运气。我的PHP配置:
./configure \
--prefix=/usr/local/php \
--enable-fpm \
--enable-inline-optimization \
--disable-magic-quotes \
--enable-mbstring \
--enable-mbregex \
--enable-safe-mode \
--enable-wddx=shared \
--enable-xml \
--with-gd \
--enable-gd-native-ttf \
--with-png-dir=/usr \
--with-jpeg-dir=/usr \
--with-freetype-dir=/usr \
--with-gettext \
--with-curl \
--with-mysql=/usr \
--with-mysqli=/usr/bin/mysql_config \
--with-regex=system \
--with-zlib-dir=/usr/lib \
--with-openssl \
--with-snmp \
--enable-ucd-snmp-hack
这只发生在应用程序的某个特定页面上(代码太大而无法共享)。看起来它在关闭时失败了。大约6或7年前我在PHP跟踪器上看到了这个错误报告,但从那时起就没有人听说过。
奇怪的是,几天前一切正常,直到我对应用程序进行了一些更改。它不是单一的,我希望我可以确定确切的提交,但是在它工作之间和下次我意识到它不起作用之间有大约5次提交。
任何人都可以对此做出正面或反面,还是应该提交错误报告并希望最好?
答案 0 :(得分:2)
想出来(有点)。从http://snaps.php.net/获得了最新的开发版本(5.3-201105190430)并编译了&安装它。这解决了这个问题(显然他们知道了这个问题并让它排队等候)。
谢谢!
答案 1 :(得分:2)
我有一个客户正在经历几乎相同的coredump。他们使用PHP 5.2.17,所以这是一个长期存在的错误。感谢您指出有效的快照。我刚刚从那个日期和时间的PHP的svn中提取出来并且与5.3.6的股票做了差异。我怀疑是其中之一修复了它:
。修复了错误#54585(track_errors导致段错误)。
。修复了错误#54372(崩溃访问全局对象本身从其__get()句柄返回。)
。修复了错误#54262(将值分配给非数组中的维度时崩溃)。
。修复了dtor内部的崩溃以进行错误处理。
。修复了当通过php_admin_value设置browscap ini指令时错误#54580(get_browser()分段错误。)
你说这个问题出现在大约5次提交之间。你有没有机会向我提供你的应用程序的差异,只包含那5个提交,这样我们就可以确切地知道上述哪些修复是相关的?它可能有助于确定解决bug的方法。
请随时发送电子邮件至releaze3 AT gmail DOT com。不是我真正的电子邮件,但我会回复我的真实邮件(避免垃圾邮件 - 我不在乎垃圾邮件是否转到该地址)。希望我们能够一起确定导致这种情况的原因并为人们提供无法升级其PHP的解决方法。
答案 2 :(得分:0)
你可能会遇到https://bugs.php.net/bug.php?id=63055“使用SF2测试套件的zend_gc中的Segfault”,这显然是由“任何使用带有递归数组的zval_dtor都可能触发此段错误。”