最近一项目压力比较大,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为了调试memcached,会碰到了提示说libmemcached/io。cc不存在,于是也把libmemcached的源码也下载回来。注意版本得配对,否则容易造成找代码行数找不准,就白瞎了。)/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
警告:源文件比执行更近。>以前看版本用我来看#/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问题