Debian及Apache升级后WSGI出现段错误求助
我之前处理过几乎一模一样的跨版本升级场景,这种段错误(signal 11)大概率是mod_wsgi与Apache 2.4不兼容或者Python环境依赖的编译库冲突导致的——毕竟从Debian 7(Wheezy)跳去8(Jessie),Apache和系统底层库都有大版本变化,很容易踩这种坑。
先看你给出的核心错误日志:
[Tue Mar 27 21:06:34.843952 2018] [core:notice] [pid 117022] AH00052: child pid 128687 exit signal Segmentation fault (11)
[Tue Mar 27 21:06:34.844011 2018] [wsgi:info] [pid 117022] mod_wsgi (pid=128687): Process 'icmlcc' has died, deregister and restart it.
[Tue Mar 27 21:06:34.844021 2018] [wsgi:info] [pid 117022] mod_wsgi (pid=128687): Process 'icmlcc' terminated by signal 11
下面是按优先级排序的解决步骤:
1. 修复mod_wsgi与Apache 2.4的版本适配
Debian 7里的mod_wsgi是针对Apache 2.2编译的,直接带到Apache 2.4里必然会出现兼容性问题:
- 先卸载旧的mod_wsgi包:
apt-get remove libapache2-mod-wsgi - 安装适配Apache 2.4的版本:
若你的Django基于Python 2开发,执行:
若基于Python 3,必须安装专门的py3版本:apt-get install libapache2-mod-wsgiapt-get install libapache2-mod-wsgi-py3 - 重启Apache生效:
这一步解决了我当时80%的同类问题。service apache2 restart
2. 重建Python虚拟环境(若使用了虚拟环境)
跨系统升级后,虚拟环境里的带C扩展的依赖包(比如mysqlclient、numpy)是基于旧系统库编译的,和新系统库不兼容,极易触发段错误:
- 先备份当前依赖列表:
pip freeze > requirements.txt - 停掉Apache后删除旧虚拟环境:
rm -rf /path/to/your/venv - 重新创建虚拟环境:
Python 2环境用:
Python 3环境用:virtualenv /path/to/your/venvpython3 -m venv /path/to/your/venv - 激活虚拟环境后重新安装所有依赖:
source /path/to/your/venv/bin/activate pip install -r requirements.txt
3. 开启WSGI调试日志定位精准问题
如果前两步没解决,就通过详细日志找根源:
- 修改Apache主配置文件
/etc/apache2/apache2.conf,添加或调整日志级别:LogLevel info wsgi:debug - 重启Apache后,查看
/var/log/apache2/error.log,里面会有WSGI进程启动、加载模块的详细信息,能帮你定位到具体是哪个模块或代码触发了段错误。
4. 验证Django版本兼容性
Debian 8默认的Python 3是3.4版本,若你的Django版本过旧(比如1.6及以下),可能和Python 3.4不兼容,建议升级到兼容的LTS版本,比如Django 1.11(支持Python 2.7-3.6):
pip install django==1.11.29
按这个流程操作,基本能解决这类段错误问题。
内容的提问来源于stack exchange,提问作者lee

