GDB分析PHP连接Memcached导致coredump问题

  最近一项目压力比较大,502超多,PHP进程coredump比较频繁于是学习了下coredump的调试讲下PHP, coredump的调试,coredump先准备代码比较好,因为PHP是开源的,这点好办。我的是存在/usr/地方/src//usr/地方/src/php-5.3.10/下第一种当然是通用的调试 gdb/usr/local/php/sbin/php-fpm - c/数据/core_files/核心- PHP fpm - 28436 - 1370008094 第二种是PHP特有的调试获得一个PHP正在运行的进程 # ps ef | grep php-fpm |头   # gdb - pid=$ pid   在源/usr/local/src//usr/地方/src/php-5.3.10/. gdbinit 这种方式能调试一些PHP特有的东西,比如包括参数的函数调用栈的信息。先讲通用方式调试 (gdb) bt   # 0 0 x00007ffed0603a75/lib/libc.so.6的提高()   # 1 0 x00007ffed06075c0/lib/libc.so.6 abort ()   # 2 0 x00007ffed342ef7c memcached_io_slurp (ptr=0 x2ef9f50) libmemcached/io.cc: 510   # 3 0 x00007ffed3431da6 memcached_quit_server (ptr=0 x2ef9f50 io_death=false)在libmemcached/quit.cc: 95   # 4 0 x00007ffed3431eed send_quit (ptr=0 x2d34e90) libmemcached/quit.cc: 137   # 5 0 x00007ffed342ff39 _free (ptr=0 x2d34e90 release_st=true)在libmemcached/memcached.cc: 130   # 6 0 x00007ffed3430397 memcached_free (ptr=0 x2d34e90) libmemcached/memcached.cc: 284   # 7 0 x00000000005d00e0 php_memc_destroy (m_obj=0 x2e3bf60,持久=0 \ 000)/usr/local/src/php-5.3.10/ext/memcached/php_memcached.c: 2519   # 8 0 x00000000005d145f php_memc_free_storage/usr/local/src/php-5.3.10/ext/memcached/php_memcached.c (i_obj=0 x2dea580): 2530   # 9 0 x000000000081817a zend_objects_store_del_ref_by_handle_ex(处理=& lt;价值优化out>,处理程序=& lt;价值优化out>)/usr/local/src/php-5.3.10/Zend/zend_objects_API.c: 220   # 10 0 x0000000000818193 zend_objects_store_del_ref/usr/local/src/php-5.3.10/Zend/zend_objects_API.c (zobject=0 x2dea620): 172   # 11 0 x00000000007e9fb5 _zval_dtor(优化out> zval_ptr=& lt;价值;)/usr/local/src/php-5.3.10/Zend/zend_variables.h: 35   # 12 _zval_ptr_dtor(优化out> zval_ptr=& lt;价值;)/usr/local/src/php-5.3.10/Zend/zend_execute_API.c: 447   # 13 0 x00000000008020eb zend_hash_destroy/usr/local/src/php-5.3.10/Zend/zend_hash.c (ht=0 x2d21e20): 529   # 14 0 x00000000007f5416 _zval_dtor_func/usr/local/src/php-5.3.10/Zend/zend_variables.c (zvalue=https://www.yisu.com/zixun/0x2d21df0): 43   # 15 0 x00000000007e9fb5 _zval_dtor (zval_ptr=<值优化>)/usr/local/src/php-5.3.10/Zend/zend_variables.h: 35   # 16 _zval_ptr_dtor (zval_ptr=<值优化>)/usr/local/src/php-5.3.10/Zend/zend_execute_API.c: 447   # 17 0 x00000000008023f3 zend_hash_clean/usr/local/src/php-5.3.10/Zend/zend_hash.c (ht=0 x2d21cb0): 561   # 18 0 x00000000007ee2cb zend_cleanup_op_array_data(函数=<值优化>)/usr/local/src/php-5.3.10/Zend/zend_opcode.c: 133   # 19 zend_cleanup_function_data(函数=<值优化>)/usr/local/src/php-5.3.10/Zend/zend_opcode.c: 140   # 20 0 x0000000000801ea4 zend_hash_reverse_apply (ht=0 x29e5c30 apply_func=0 x7ee2a0 )/usr/local/src/php-5.3.10/Zend/zend_hash.c: 757   21 # 0 x00000000007ea2f3 shutdown_executor/usr/local/src/php-5.3.10/Zend/zend_execute_API.c (): 296   22 # 0 x00000000007f6563 zend_deactivate/usr/local/src/php-5.3.10/Zend/zend.c (): 891   23 # 0 x00000000007a47a0 php_request_shutdown(假=<值优化>)/usr/local/src/php-5.3.10/main/main.c: 1661   # 24 0 x0000000000884442主要(命令行参数个数=> <值优化,argv=<值优化>)/usr/local/src/php-5.3.10/sapi/fpm/fpm/fpm_main.c: 1886   (gdb) f 2   # 2 0 x00007ffed342ef7c memcached_io_slurp (ptr=0 x2ef9f50) libmemcached/io.cc: 510   510 libmemcached/io。答:没有这样的文件或目录。   在libmemcached/io。cc 为了调试memcached,会碰到了提示说libmemcached/io。cc不存在,于是也把libmemcached的源码也下载回来。注意版本得配对,否则容易造成找代码行数找不准,就白瞎了。警告:源文件比执行更近。以前看版本用我来看 #/usr/地方/php/sbin/php-fpm我| grep libmemcached   libmemcached version=比;1.0.4   # wget https://launchpad.net/libmemcached/1.0/1.0.4/+下载/libmemcached-1.0.4.tar.gz 之前把代码解压到php源码目录下,,如果出错可能是路径不对继续回来gdb (gdb) f 2   # 2 0 x00007ffed342ef7c memcached_io_slurp (ptr=0 x2ef9f50) libmemcached/io.cc: 510   510年libmemcached/io.cc 看到是libmemcached/io。cc,的510行报错# vim, libmemcached/io。cc + 510看到代码如下: memcached_return_t memcached_io_slurp (memcached_server_write_instance_st ptr)   {   assert_msg(简称:“程序员错误,无效memcached_server_write_instance_st”);   断言(memcached_is_udp (ptr→根)==false);   如果(ptr→fd==INVALID_SOCKET)   {   assert_msg (int (ptr→状态)& lt;=int (MEMCACHED_SERVER_STATE_ADDRINFO),“无效的套接字状态”);# 510行   返回MEMCACHED_CONNECTION_FAILURE;   }   ssize_t data_read;

GDB分析PHP连接Memcached导致coredump问题