我正在尝试解决分段错误。此消息显示在我的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)无限
答案 0 :(得分:11)
我终于能够在Ubuntu中看到Apache的核心转储:
/etc/default/apport
编辑apache2.conf:
CoreDumpDirectory /tmp/apache2-gdb-dump
确保Apache可以写入:
# chmod 777 /tmp/apache2-gdb-dump
删除核心转储大小限制:
# ulimit -c unlimited
(可选)更改核心转储的名称模式:
# echo 'coredump-%e.%p' > /proc/sys/kernel/core_pattern
要分析转储使用 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