php出現Segmentation fault

發現 Segmentation fault

今天安裝了 xdebug、xhrpof等分析工具, 而後在運行相關命令時出現了 Segmentation fault(分段錯誤), 通常出現此錯誤大部分 內存越界指針錯誤引發的緣由, 並不是 php 代碼自己緣由. 出現此問題大部分由於底層拓展致使。php

示例:laravel

php artisan xxx:xxxx

output:
Segmentation fault
複製代碼

生成core dump

這種錯誤信息, 藉助 core.dump 文件分析是種比較好的辦法git

默認文件是關閉的, 開啓生成 core.dump 文件github

ulimit -c unlimited
複製代碼

從新執行命令api

php artisan xxx:xxxx

Segmentation fault (core dumped)
複製代碼

這時默認就在當前目錄下生成了 core 文件, 咱們藉助 gdb 來看下bash

調試

yum install gdb
複製代碼

執行 gdb , 直接 bt 命令查看堆棧信息composer

gdb php core
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x00000000008f8eb9 in ZEND_USER_OPCODE_SPEC_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1806
#2 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#3 0x00000000008f44bf in ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:35533
#4 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#5 0x00000000008f7a35 in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:949
#6 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#7 0x0000000000852981 in zend_call_function (fci=fci@entry=0x7ffee921ebc0, fci_cache=fci_cache@entry=0x7ffee921eb90) at /usr/local/src/php-7.1.9/Zend/zend_execute_API.c:855
#8 0x000000000087e7b0 in zend_call_method (object=0x7f205d2720c8, obj_ce=0x7f205d203600, fn_proxy=<optimized out>, 
    function_name=0x7f205d276018 "composer\\autoload\\classloader::loadclass\001", function_name_len=<optimized out>, retval_ptr=retval_ptr@entry=0x0, 
    param_count=param_count@entry=1, arg1=0x7f205d213a80, arg2=arg2@entry=0x0) at /usr/local/src/php-7.1.9/Zend/zend_interfaces.c:99
#9 0x00000000007287e1 in zif_spl_autoload_call (execute_data=<optimized out>, return_value=<optimized out>) at /usr/local/src/php-7.1.9/ext/spl/php_spl.c:420
#10 0x0000000000852ad9 in zend_call_function (fci=fci@entry=0x7ffee921ee20, fci_cache=fci_cache@entry=0x7ffee921edf0) at /usr/local/src/php-7.1.9/Zend/zend_execute_API.c:871
#11 0x0000000000852f76 in zend_lookup_class_ex (name=name@entry=0x7f204b179c70, key=0x7f204c538a80, use_autoload=use_autoload@entry=1)
    at /usr/local/src/php-7.1.9/Zend/zend_execute_API.c:1028
#12 0x0000000000853888 in zend_fetch_class_by_name (class_name=0x7f204b179c70, key=<optimized out>, fetch_type=fetch_type@entry=512)
    at /usr/local/src/php-7.1.9/Zend/zend_execute_API.c:1463
#13 0x00000000008f2c8f in ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:5479
#14 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#15 0x0000000000852981 in zend_call_function (fci=fci@entry=0x7ffee921f060, fci_cache=fci_cache@entry=0x7ffee921f030) at /usr/local/src/php-7.1.9/Zend/zend_execute_API.c:855
#16 0x00000000006d3bb4 in zim_reflection_class_newInstanceArgs (execute_data=<optimized out>, return_value=0x7f205d213930)
    at /usr/local/src/php-7.1.9/ext/reflection/php_reflection.c:4996
#17 0x00000000008f7720 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1099
#18 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#19 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#20 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#21 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#22 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#23 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#24 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#25 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#26 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#27 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#28 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#29 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#30 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#31 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#32 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#33 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#34 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#35 0x00000000008f7a35 in ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:949
---Type <return> to continue, or q <return> to quit---return
#36 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#37 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#38 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#39 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#40 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#41 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#42 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
#43 0x00000000008f9a44 in zend_execute (op_array=0x7f205d277000, op_array@entry=0x7f204c1df898, return_value=return_value@entry=0x7f205d213860)
    at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:474
#44 0x0000000000861d54 in zend_execute_scripts (type=type@entry=8, retval=0x7f205d213860, retval@entry=0x0, file_count=file_count@entry=3)
    at /usr/local/src/php-7.1.9/Zend/zend.c:1480
#45 0x0000000000802e60 in php_execute_script (primary_file=primary_file@entry=0x7ffee92218d0) at /usr/local/src/php-7.1.9/main/main.c:2552
#46 0x00000000008fbbdf in do_cli (argc=3, argv=0x1231830) at /usr/local/src/php-7.1.9/sapi/cli/php_cli.c:993
#47 0x0000000000448d80 in main (argc=3, argv=0x1231830) at /usr/local/src/php-7.1.9/sapi/cli/php_cli.c:1381
複製代碼

經過簡單的堆棧信息, 咱們大概能夠看到一些異常點.函數

#39 0x00000000008f75b5 in ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER () at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:1076
#40 0x00000000008a6a9b in execute_ex (ex=<optimized out>) at /usr/local/src/php-7.1.9/Zend/zend_vm_execute.h:429
複製代碼

這裏大量反覆的調用了 execute_ex , 經過搜索瞭解此爲最核心的執行opcode的函數。工具

安裝opcache、xdebug等可能會出現段錯誤問題, 具體可查看下面參考鏈接。 因而先將 opcache 禁用, 本地環境正常。fetch

由於目前本身知識體系欠缺, 對內核瞭解不夠, 只能先解決此問題. 此文先到此爲止了.

參考資料: github.com/laravel/fra…

相關文章
相關標籤/搜索