CoreDumpDirectory 在 Ubuntu 上无效;apache2 错误日志中出现段错误

1 投票
2 回答
1492 浏览
提问于 2025-04-16 16:39

我在使用Ubuntu 10.10时,无法在CoreDumpDirectory中记录apache2崩溃的情况。我用的是Django 1.2.3和apache2加上mod_wsgi。我按照这个问题的回答步骤操作,但没有成功。我在apache2.conf文件的最后添加了 - CoreDumpDirectory /var/cache/apache2/
然后执行了'ulimit -c unlimited',重启了apache服务器。接着我重现了导致apache错误日志显示的情况——"child pid 27288 exit signal Segmentation fault (11)",但在CoreDumpDirectory中并没有记录到apache2崩溃的情况,/var/cache/apache2中也什么都没有。

2 个回答

1

我也遇到过mod_wsgi的子进程无法生成核心转储的问题。简单来说,你需要编辑 /etc/sysctl.conf 文件,并设置 fs.suid_dumpable=2

详细说明:

在Linux系统中,如果一个进程是以root身份启动的,然后又降低了权限,系统会阻止它生成核心转储文件。(这是出于安全考虑,防止SUID可执行文件泄露内存信息给用户)。将suid_dumpable设置为2意味着核心转储文件将由root拥有,这样也不会直接造成安全问题。

那么这为什么会影响mod_wsgi呢?显然,mod_wsgi的子进程是从Apache的主进程中分叉出来的。Apache通常是以root身份启动的,因为它需要绑定一些特权端口,比如80端口,然后再降低权限。

(原始错误报告:https://code.google.com/p/modwsgi/issues/detail?id=247

0

我解决了这个问题。问题出在PyLucene环境在运行时初始化上。我每次请求到来时都执行initvm()这个调用,这导致了程序崩溃。这个链接告诉我应该在.wsgi文件中进行初始化,按照这个做之后就没有再出现崩溃的问题了。

撰写回答