You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache子进程出现段错误,无法获取core dump文件排查根源

排查Apache子进程段错误无法生成Core Dump的问题

首先,你已经做了基础配置但仍拿不到core dump,大概率是权限、进程限制继承或者系统全局core配置的问题,咱们一步步来拆解:

  • 确认CoreDumpDirectory的权限与有效性
    先确保Apache运行的用户(通常是www-data)对/tmp目录有读写权限——虽然/tmp默认是777,但有些系统可能给它加了noexec或特殊ACL限制。另外,重启Apache后,一定要检查错误日志(比如/var/log/apache2/error.log),看有没有类似Core dump directory is '/tmp'的确认信息;如果有报错,说明配置位置不对(比如误放到了虚拟主机段,应该放在全局配置区)。

  • 检查Apache进程的实际ulimit限制
    你手动执行ulimit -a只是当前shell的设置,但Apache如果是通过systemd或init脚本启动的,并不会继承这个shell的限制。比如systemd默认会重置core文件大小限制:

    1. 查看Apache的systemd基础配置:cat /lib/systemd/system/apache2.service
    2. 如果里面没有LimitCORE=infinity,创建override文件修改:systemctl edit apache2.service,添加以下内容:
      [Service]
      LimitCORE=infinity
      
    3. 重新加载配置并重启Apache:systemctl daemon-reload && systemctl restart apache2
      最后用cat /proc/$(pidof apache2)/limits | grep "Max core file size"验证限制是否真的生效。
  • 检查系统全局Core Dump配置
    很多现代Linux系统用systemd的coredumpctl统一收集core文件,不会直接写到你指定的/tmp目录。先查看全局core模式:

    cat /proc/sys/kernel/core_pattern
    

    如果输出是类似|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h的管道命令,说明core文件被systemd收集了,你可以这样导出:

    1. 列出Apache相关的core记录:coredumpctl list apache2
    2. 找到对应进程的PID,导出到/tmp:coredumpctl dump <PID> --output=/tmp/apache_core.dump
  • 退而求其次:不依赖Core Dump排查PHP模块
    如果以上方法还是拿不到core dump,你可以直接从PHP模块入手缩小范围:

    1. 先禁用所有非必要的PHP模块,修改php.ini或Apache的PHP配置段,只保留最基础的模块(比如php_core、php_pdo)
    2. 重启Apache,观察是否还出现段错误
    3. 如果恢复正常,再逐个启用之前禁用的模块,每次重启后测试,直到段错误重现,就能定位到出问题的模块

内容的提问来源于stack exchange,提问作者Oleg Bolden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:04:28