如何找出发生SEGV内存错误的程序

如题所述

  分析过程

  发现段错误:

  日志中的信息表明,进程号为11274的进程由于收到SIGSEGV信号而退出了。收到这个信号的时候,程序是可以生成core文件的。不过通过日志我们可以知道进程11274退出时没有生成core文件。因为在php-fpm的日志中,如果退出时生成了core文件,日志中会有“SIGSEGV – core dumped”字样。如:

  [20-Feb-2014 08:37:59] WARNING: [pool www] child 15845 exited on signal 11 (SIGSEGV – core dumped) after 1.051001 seconds from start

  生成core文件:

  为啥没生成core文件?是因为我们的系统做了限制。执行如下命令可以查看限制情况:

  

  可以看出,系统对于core文件大小默认限制是0.也就是说不能生成core文件。可以通过以下命令设置大小。

  $ulimit -c unlimited

  通过命令,我们就把系统对于core文件的大小限制去除了。

  

  设置完后,重启了php-fpm 进程。剩下的事情,就是坐等core文件生成了。
第二天,查看php-fpm日志,发现了如下记录:
[20-Feb-2014 08:37:59] WARNING: [pool www] child 15845 exited on signal 11 (SIGSEGV – core dumped) after 1.051001 seconds from start

  [20-Feb-2014 08:39:04] WARNING: [pool www] child 17803 exited on signal 11 (SIGSEGV – core dumped) after 0.927973 seconds from start

  [20-Feb-2014 08:42:18] WARNING: [pool www] child 23491 exited on signal 11 (SIGSEGV – core dumped) after 0.798308 seconds from start

  说明,core文件已经生成。

  更多core文件生成和使用的相关信息请查看《 æ€Žæ ·ç”¨core文件调试你的linux程序》

  gdb分析core文件:

  既然core文件生成了,现在该gdb上场了。通过如下命令查看程序退出时的栈信息。

  $gdb -e /home/admin/php/sbin/php-fpm -c core.15845

  …………..此处省略n多无关紧要的字

  $info threads

  3 process 15850  0x0000003cf92d3f9a in epoll_ctl () from /lib64/libc.so.6

  2 process 15845  0x0000003cf92c4f65 in _xstat () from /lib64/libc.so.6

  * 1 process 15851  0x00007fa94e230310 in ez_run (loop=0x2434c60, flags=0) at ez.c:2363

  $thread 2

  [Switching to thread 2 (process 15845)]#0  0x0000003cf92c4f65 in _xstat () from /lib64/libc.so.6

  $bt

  #0  0x0000003cf92c4f65 in _xstat () from /lib64/libc.so.6

  #1  0x00007fa94df8fd8b in hsf::hsf_mkdir (path=0x7fa930001628 “/home/admin/logs/hsfcpp”) at /usr/include/sys/stat.h:436

  #2  0x00007fa94df8feae in hsf::hsf_mkdirp (pathname=<value optimized out>) at utils/fileutils.cc:50

  #3  0x00007fa94dfad7cc in hsf::hsf_stat_log_init (path=@0x7fa94e21f080, name=@0x7fffb607a620) at hsf/hsf_stat_file.cc:37

  #4  0x00007fa94dfabb36 in hsf::hsf_stat_monitor::init (this=<value optimized out>) at hsf/hsf_stat_monitor.cc:231

  #5  0x00007fa94dfa899a in hsf_core_bootstrap () at hsf/hsf.cc:104

  #6  0x00007fa94dfa8cea in hsf::hsf_core::init () at hsf/hsf.cc:129

  #7  0x00007fa94e448b52 in zm_activate_hsf (type=<value optimized out>, module_number=<value optimized out>) at /home/lingzhan/hsf_php_0.9/php_hsf.cpp:188

  #8  0x000000000061d94c in ?? ()

  #9  0x000000000226ee20 in ?? ()

  #10 0x0000000000624c35 in ?? ()

  #11 0x00000000024bc840 in ?? ()

  #12 0x00000000024bc840 in ?? ()

  #13 0x00000000024bc840 in ?? ()

  #14 0×0000000000000000 in ?? ()

  再继续分析其他的两个core文件,发现也都有这个栈信息。基本可以肯定是hsf的问题了。

  另外,在/var/log/message 中也发现了如下记录:

  Mar 13 14:40:07 s006132.cm6 kernel: : [5332900.567547] php-fpm[31017]: segfault at 30 ip 00007fdc74df3310 sp 00000000435b8040 error 4 in libeasy.so.0[7fdc74de3000+23000]

  libeasy.so 正是hsf中调用的。进一步确认是执行hsf程序时出现问题的。

温馨提示:内容为网友见解,仅供参考
无其他回答

如何找出发生SEGV内存错误的程序
分析过程 发现段错误:日志中的信息表明,进程号为11274的进程由于收到SIGSEGV信号而退出了。收到这个信号的时候,程序是可以生成core文件的。不过通过日志我们可以知道进程11274退出时没有生成core文件。因为在php-fpm的日志中,如果退出时生成了core文件,日志中会有“SIGSEGV – core dumped”字样。如:[...

如何找出发生SEGV内存错误的程序
e – 程序文件名 执行如下命令,让设置生效 sysctl -p 重启php-fpm service php-fpm restart 重现502错误 访问http:\/\/demo.linuxeye.com\/wp-admin\/customize.php?theme=dux 日志\/usr\/local\/php\/var\/log\/php-fpm.log中会有"SIGSEGV – core dumped"字样 如何使用core文件 可以使用gdb命令查看core文...

Linux下如何捕获SIGSEGV 的发生位置
方法一:# .\/myprg \/\/ 运行程序# ps -ef | grep myprg \/\/ 找出 myprg 的 pid# gdb myprg 2032 > debug.log \/\/ 让 gdb 接管 myprg 的运行# (gdb) continue此方法利用gdb调试器捕获SIGSEGV。上例中,将gdb输出信息存入debug.log,关闭终端,gdb并不退出,继续运行直到 myprg ...

svchost.exe应用程序错误,该内存不能被read求非重装还原解决方案_百度...
1)开机马上按F8不动或没有开机就先按F8不动到高级选项出现在松开手,用上下键选安全模式回车,进入安全模式用软件查杀木马,卸载出事前安装的所有东西,还原一下系统或重装系统(如果可以进入安全模式,说明你安装了不合适的东西,将出事前下载的不合适东西全部卸载,还有就是你中了木马,用软件查杀木马...

sql 内存溢出
第一步 ,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加。)第二步 ,检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。第三步 ,对代码进行走查和分析,找出可能发生内存溢出的位置。重点排查以下几点:1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,...

出现memoryoverflowerror提示怎么办
第一步、修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数一定不要忘记加)第二步、检查错误日志,查看“OutOfMemory”错误前是否有其 它异常或错误。第三步、对代码进行走查和分析,找出可能发生内存溢出的位置。重点排查以下几点: 1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,...

svchost.exe 应用程序错误
例一:IE浏览器出现“0x0a8ba9ef”指令引用的“0x03713644” 内存,或者“0x70dcf39f”指令引用的“0x00000000”内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。解决方法:...

0x004ca99e指令引用的0x00565244内存。该内存不能为written
3.试用新版本的应用程序。 Mode: 将虚拟内存撤换 答案: 目前为止是肯定的,也就是如在下次冷天到来时亦没再发生,就代表这是主因 追加: 如果你用 Ghost 恢复 OS 后建议 删除WINDOWS\\PREFETCH目录下所有*.PF文件因为需让windows重新收集程序的物理地址 有些应用程序错误 "0x7cd64998" 指令参考的 "0x14c96730"...

应用程序发生异常未知的软件异常(0×c0000417),位置为0×..._百度知...
“HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\”中,右边窗口找到残留的程序名删除。或者打开注册表编辑器→在编辑→查找中→输入出错文件名→把搜到的删除→按F3键→搜索下一个→直到删完所有的为止。以上方式无法处理好,看看下面:完全注册dll:打开“运行”输入→cmd→回车 然后...

svchost.exe 应用程序错误
1.用360安全卫士或超级兔子卸载插件清除垃圾.2.运行容量较大的程序或大型游戏时,要重启一下微机,及时释放内存.系统出现内存不能为"Read"或"written"的原因有:1、驱动不稳定,与系统不兼容,这最容易出现内存不能为 Read 或者文件保护 2、系统安装了一个或者多个流氓软件,这出现 IE 或者系统崩溃的...

相似回答