通过查看php日志/usr/local/php/var/log/php-fpm.log,有如下警告信息:

  1. [16-Mar-2015 16:03:09] WARNING: [pool www] child 9453 exited on signal 11 (SIGSEGV) after 9.601040 seconds from start

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

  1. [16-Mar-2015 16:04:29] WARNING: [pool www] child 9581 exited on signal 11 (SIGSEGV - core dumped) after 15.921916 seconds from start

core dump文件对于诊断Linux中程序的问题非常有用。当程序异常退出的时候,可能会生成core文件。如,程序写一个不属于他的内存,操作系统出于保护,会发信号给程序,程序可能会因此而退出,退出的时候可能会生成core文件。我们可以通过分析core文件,找出程序中那里有内存问题。这篇文章主要是阐述生成core文件需要做的一些设置。

如何生成core文件

默认Linux操作系统是不允许生成core文件的。如下:

  1. [root@linuxeye ~]# ulimit -a
  2. core file size          (blocks, -c) 0
  3. data seg size           (kbytes, -d) unlimited
  4. scheduling priority             (-e) 0
  5. file size               (blocks, -f) unlimited
  6. pending signals                 (-i) 5762
  7. max locked memory       (kbytes, -l) 64
  8. max memory size         (kbytes, -m) unlimited
  9. open files                      (-n) 65535
  10. pipe size            (512 bytes, -p) 8
  11. POSIX message queues     (bytes, -q) 819200
  12. real-time priority              (-r) 0
  13. stack size              (kbytes, -s) 10240
  14. cpu time               (seconds, -t) unlimited
  15. max user processes              (-u) 65535
  16. virtual memory          (kbytes, -v) unlimited
  17. file locks                      (-x) unlimited

可以通过如下命令解除限制:

  1. [root@linuxeye ~]# ulimit -c unlimited
  2. [root@linuxeye ~]# ulimit -a
  3. core file size          (blocks, -c) unlimited
  4. data seg size           (kbytes, -d) unlimited
  5. scheduling priority             (-e) 0
  6. file size               (blocks, -f) unlimited
  7. pending signals                 (-i) 5762
  8. max locked memory       (kbytes, -l) 64
  9. max memory size         (kbytes, -m) unlimited
  10. open files                      (-n) 65535
  11. pipe size            (512 bytes, -p) 8
  12. POSIX message queues     (bytes, -q) 819200
  13. real-time priority              (-r) 0
  14. stack size              (kbytes, -s) 10240
  15. cpu time               (seconds, -t) unlimited
  16. max user processes              (-u) 65535
  17. virtual memory          (kbytes, -v) unlimited
  18. file locks                      (-x) unlimited

注意,ulimit -c 的设置仅仅是对你完成设置后启动的进程有效。而且退出登陆后,再进入需要从新设置。否则从新登陆后启动的进程也无法生成core文件。

如果想永久生效,可以把命令加入到 /etc/profile 中。建议不要这样做, 会疯狂dump文件,浪费性能

如何找到core文件

一般情况下,core文件会生成在你执行程序的地方。文件名是core.进程号

你也可以指定core文件名和生成目录。在/etc/sysctl.conf 文件中指定

  1. # vi /etc/sysctl.conf
  2. kernel.core_uses_pid = 1 #追加进程号到core文件名中
  3. fs.suid_dumpable = 2 #确保设置属主的进程也可以生成core文件
  4. kernel.core_pattern = /tmp/core-%e-%s-%u-%g-%p-%t #指定core文件生成的位置和文件名规则。

文件名规则可以使用的参数有:

  1. %% – 符号%
  2. %p – 进程号
  3. %u – 进程用户id
  4. %g – 进程用户组id
  5. %s – 生成core文件时收到的信号
  6. %t – 生成core文件的 时间 (seconds since 0:00h, 1 Jan 1970)
  7. %h – 主机名
  8. %e – 程序文件名

执行如下命令,让设置生效


  1. # sysctl -p

重启php-fpm

  1. 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文件信息

  1. gdb -e /usr/local/php/sbin/php-fpm -c /tmp/core-php-fpm-11-501-501-9581-1426493066

根据上面的堆栈信息,可以知道iplookup扩展有问题,编辑/usr/local/php/etc/php.ini,注销掉iplookup段,重启php-fpm ,正常。。。

参考:http://www.searchtb.com/2014/03/如何找出发生segv内存错误的程序.html

如何快速定位找出SEGV内存错误的程序Bug的更多相关文章

  1. 转:如何找出发生SEGV内存错误的程序

    原文来自于:http://www.searchtb.com/2014/03/%E5%A6%82%E4%BD%95%E6%89%BE%E5%87%BA%E5%8F%91%E7%94%9Fsegv%E5% ...

  2. Linux下找出吃内存的方法总结

    Linux下查询进程占用的内存方法总结,假设现在有一个「php-cgi」的进程 ,进程id为「25282」. 现在想要查询该进程占用的内存大小.linux命令行下有很多的工具进行查看,现总结常见的几种 ...

  3. 面试题:在一个文件中有 10G 个整数,乱序排列,要求找出中位数(内存限制为2G)

    假设整数为32bit,4个字节存储 这种题目,首先想到的是分而治之.将文件中数字分组.然后遍历文件中的数字,按分组进行计数.最后找到中位数所在的分组区间 1.如果10G个整数都为同一个,那么10G整数 ...

  4. Linux中找出占用内存最多的前N个进程

    一.使用ps命令 ps -aux | sort -k4nr | head -N *命令详解: 1. head:-N可以指定显示的行数,默认显示10行. 2. ps:参数a指代all——所有的进程,u指 ...

  5. 快速找出故障机器(single number)

    简单起见,假设每个机器存储一个标号为ID的记录(ID是小于十亿的整数),假设每份数据都保存两个备份,这样就有两个机器储存了同样的数据. 1.在某个时间,如果得到一个数据文件ID的列表,是否能够快速地找 ...

  6. 小心DLL链接静态库时的内存错误

    本文转自http://www.bennychen.cn/2010/09/%E5%B0%8F%E5%BF%83dll%E9%93%BE%E6%8E%A5%E9%9D%99%E6%80%81%E5%BA% ...

  7. 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.

    32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...

  8. 深入浅出WinDbg——利用快速定位错误

    场景描述: Sharepoint代码的某方法LoadLines()中使用了SPSecurity.RunWithElevatedPrivileges(delegate() 此方法两次调用了Common. ...

  9. 用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)

    原文地址: http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html 很早看到windbg+sos方面的知识,一直没仔细学习,也许因为 ...

随机推荐

  1. IDAPython学习(二)

    1.常用函数 ScreenEA() 获取IDA调试窗口中,光标指向代码的地址.通过这个函数,我们就能够从一个已知的点运行我们的脚本. GetInputFileMD5() 返回IDA加载的二进制文件的M ...

  2. docker 容器内启动 sshd 启动报错

    创建容器设置密码 安装 openssh-server 启动出错 在容器内 使用 /usr/sbin/sshd -d 启动报错? [root@9d41c7f36c5e tmp]# /usr/sbin/s ...

  3. Docker 创建容器 查看容器状态 - 三

    Docker 创建容器 1.拉取镜像 默认是 docker.io 仓最新镜像 docker pull tomcat 2.运行一个服务容器 docker run -d -p 0.0.0.0:18080: ...

  4. [C++]四分树(Quadtrees)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] 四分树Quadtrees 一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个 ...

  5. c++ virtual 记录

    虚继承: http://zh.wikipedia.org/wiki/%E8%99%9A%E7%BB%A7%E6%89%BF 解决了菱形继承问题 cB cC 继承cA    cD继承cB,cC    c ...

  6. Coursera, Deep Learning 5, Sequence Models, week2, Natural Language Processing & Word Embeddings

    Word embeding 给word 加feature,用来区分word 之间的不同,或者识别word之间的相似性. 用于学习 Embeding matrix E 的数据集非常大,比如 1B - 1 ...

  7. 利用xpath爬取招聘网的招聘信息

    爬取招聘网的招聘信息: import json import random import time import pymongo import re import pandas as pd impor ...

  8. LOJ #2542「PKUWC2018」随机游走

    $ Min$-$Max$容斥真好用 $ PKUWC$滚粗后这题一直在$ todolist$里 今天才补掉..还要更加努力啊.. LOJ #2542 题意:给一棵不超过$ 18$个节点的树,$ 5000 ...

  9. D - Stone Division HackerRank - stone-division (博弈+搜索)

    题目链接:https://cn.vjudge.net/problem/HackerRank-stone-division 题目大意:给你n,m,然后是m个数.每一次你可以选择一个a[i],如果能被n整 ...

  10. mysql与linux ~ 磁盘分析与调优

    一 简介 谈谈磁盘IO的问题二 目的:如何进行IO性能问题的排查 二  linux角度   一 机械硬盘基本定义       寻道时间,表示磁头在不同磁道之间移动的时间(最耗时).       旋转延 ...