PHP segfault - как получить php файл и номер строки? - PullRequest
1 голос
/ 28 мая 2019

У меня большое приложение, работающее в многопоточном режиме - 45 потоков.В какой-то момент приложение вылетает с Segmentation fault.Я использую GDB следующим образом:

ulimit -c unlimited
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sleep 10 & killall -SIGSEGV sleep
gdb /etc/php7/bin/php /tmp/core-sleep.4970.mike-Inspiron-N5040.1557648122
run script.php

Полная обратная трассировка:

Thread 1 "php" received signal SIGSEGV, Segmentation fault.
pthreads_store_tohash (object=object@entry=0x7fffe9211b80,
    hash=0x7fffea78f188)
    at /var/www/interceptor.cmd.source/pthreads/src/store.c:564
564         ZEND_HASH_FOREACH_KEY_PTR(threaded->store.props, idx, name, storage) {
(gdb) bt
#0  pthreads_store_tohash (object=object@entry=0x7fffe9211b80,
    hash=0x7fffea78f188)
    at /var/www/interceptor.cmd.source/pthreads/src/store.c:564
#1  0x00007fffeac558d0 in pthreads_read_properties (object=0x7fffe9211b80)
    at /var/www/interceptor.cmd.source/pthreads/src/handlers.c:80
#2  0x000055555590769b in php_json_encode_array (
    buf=buf@entry=0x7fffffffb730, val=val@entry=0x7fffe9211b80,
    options=options@entry=0, encoder=encoder@entry=0x7fffffffb724)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json_encoder.c:139
#3  0x0000555555907020 in php_json_encode_zval (
    buf=buf@entry=0x7fffffffb730, val=val@entry=0x7fffe9211b80,
    options=options@entry=0, encoder=encoder@entry=0x7fffffffb724)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json_encoder.c:546
#4  0x00005555559078b5 in php_json_encode_array (
    buf=buf@entry=0x7fffffffb730, val=val@entry=0x7fffe9dada40,
    options=options@entry=0, encoder=encoder@entry=0x7fffffffb724)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json_encoder.c:218
#5  0x0000555555907020 in php_json_encode_zval (
    buf=buf@entry=0x7fffffffb730, val=val@entry=0x7fffe9dada40,
    options=options@entry=0, encoder=encoder@entry=0x7fffffffb724)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json_encoder.c:546
#6  0x00005555559078b5 in php_json_encode_array (
    buf=buf@entry=0x7fffffffb730, val=val@entry=0x7fffec21eb90,
    options=options@entry=0, encoder=encoder@entry=0x7fffffffb724)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json_encoder.c:218
#7  0x0000555555907020 in php_json_encode_zval (
    buf=buf@entry=0x7fffffffb730, val=val@entry=0x7fffec21eb90, options=0,
    encoder=encoder@entry=0x7fffffffb724)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json_encoder.c:546
#8  0x0000555555905570 in zif_json_encode (execute_data=0x7fffec21eb40,
    return_value=0x7fffec21eb20)
    at /var/www/interceptor/php-src-php-7.2.2/ext/json/json.c:245
#9  0x0000555555c41b13 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER ()
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:1032
#10 execute_ex (ex=0x7fffeab4e560)
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:59752
#11 0x00007fffeac4ba15 in pthreads_execute_ex (data=<optimized out>)
---Type <return> to continue, or q <return> to quit---
    at /var/www/interceptor.cmd.source/pthreads/php_pthreads.c:135
#12 0x0000555555c3fb5c in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER ()
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:888
#13 execute_ex (ex=0x7fffeab4e560)
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:59749
#14 0x00007fffeac4ba15 in pthreads_execute_ex (data=<optimized out>)
    at /var/www/interceptor.cmd.source/pthreads/php_pthreads.c:135
#15 0x0000555555c3fb5c in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER ()
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:888
#16 execute_ex (ex=0x7fffeab4e560)
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:59749
#17 0x00007fffeac4ba15 in pthreads_execute_ex (data=<optimized out>)
    at /var/www/interceptor.cmd.source/pthreads/php_pthreads.c:135
#18 0x0000555555c3fb5c in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER ()
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:888
#19 execute_ex (ex=0x7fffeab4e560)
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:59749
#20 0x00007fffeac4ba15 in pthreads_execute_ex (data=<optimized out>)
    at /var/www/interceptor.cmd.source/pthreads/php_pthreads.c:135
#21 0x0000555555c4265f in zend_execute (op_array=<optimized out>,
    return_value=0x0)
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend_vm_execute.h:63760
#22 0x0000555555b852d2 in zend_execute_scripts (type=type@entry=8,
    retval=retval@entry=0x0, file_count=-333321568, file_count@entry=3)
    at /var/www/interceptor/php-src-php-7.2.2/Zend/zend.c:1496
#23 0x0000555555b1276e in php_execute_script (primary_file=0x7fffffffd020)
    at /var/www/interceptor/php-src-php-7.2.2/main/main.c:2590
#24 0x0000555555c44d73 in do_cli (argc=2, argv=0x55555674b7b0)
    at /var/www/interceptor/php-src-php-7.2.2/sapi/cli/php_cli.c:1011
#25 0x00005555556e3f31 in main (argc=2, argv=0x55555674b7b0)
    at /var/www/interceptor/php-src-php-7.2.2/sapi/cli/php_cli.c:1404

Так что, вероятно, ошибка где-то в моем PHP-коде.Но я понятия не имею, где это может быть.Могу ли я узнать точный файл PHP и строку, где произошла ошибка сегментации?

Xdebug Я не могу использовать, потому что он конфликтует с некоторыми расширениями.Также многопоточный режим является проблемой для xdebug.

Моя среда:

Ubuntu server 18.04 64bit PHP 7.2.2 ZTS no-debug

...