CoreDumpDirectory不能用于ubuntu;用php获取分段错误

时间:2010-03-28 20:56:19

标签: php apache ubuntu

我正在尝试解决分段错误。此消息显示在我的apache-error.log中:

  

[通知]儿童pid 3979退出信号   分段错误(11)

我已经尝试禁用一些apache和php模块,但我仍然遇到同样的错误。

我也试过把它放在apache2.conf中:

  

CoreDumpDirectory / tmp / apache2-gdb-dump

然后chmod 777,chown www-data ...以便服务器可以写。

我看不到核心转储文件给我一个关于错误的提示。

有没有人知道为什么CoreDumpDirectory不能在Ubuntu上工作?

  

答案:$ ulimit -a   核心文件大小
  (块,-c)无限数据段大小
  (千字节,-d)无限制调度   priority(-e)0文件大小   (块,-f)无限制的未决信号   (-i)15863最大锁定内存
  (千字节,-l)32最大内存大小
  (千字节,-m)无限制打开文件
  (-n)1024管道大小(512   bytes,-p)8 POSIX消息队列
  (字节,-q)819200实时优先级   (-r)0堆栈大小
  (千字节,-s)8192 cpu时间
  (秒,-t)无限制最大用户   进程(-u)15863   虚拟内存(kbytes,-v)   无限制的文件锁
  (-x)无限

3 个答案:

答案 0 :(得分:11)

我终于能够在Ubuntu中看到Apache的核心转储:

  1. 修改/etc/default/apport
  2. 编辑apache2.conf:

      CoreDumpDirectory /tmp/apache2-gdb-dump
    
  3. 确保Apache可以写入:

    # chmod 777 /tmp/apache2-gdb-dump
    
  4. 删除核心转储大小限制:

    # ulimit -c unlimited
    
  5. (可选)更改核心转储的名称模式:

    # echo 'coredump-%e.%p' > /proc/sys/kernel/core_pattern
    
  6. 要分析转储使用 gdb

    $ gdb apache2 /tmp/apache2-gdb-dump/coredump-x.x
    

    要查看堆栈跟踪详细信息,请参阅gdb:

    gdb> where
    

    我做了,我获得了核心转储。 然而,通过查看coredump我的问题并没有解决; 这显然是我的PHP脚本中的一个问题。

    更多信息: http://matrafox.info/apache-child-pid-exit-signal-segmentation-fault.html

答案 1 :(得分:2)

默认情况下,在Ubuntu上禁用核心转储

试试这个:

ulimit -c unlimited

“ulimit -a”告诉您当前限制是什么(0表示禁用)

答案 2 :(得分:1)

请注意,重启后将删除/ tmp中的子目录,导致apache由于配置错误而无法启动。

在第二个注释中,chowning是不必要的。 / tmp是chmodded 777所以任何人都可以在那里读/写。

@arod sudo ulimit -c不起作用,因为-c也是sudo的参数。你需要sudo -s,然后是ulimit -c