Mod_wsgi工作进程分段错误(11)

我有一个与我的Django应用程序,它是与Apache / mod_wsgi托pipe的问题。 我在应用程序中添加了一些matplotlib代码,现在apache工作进程崩溃了。

我将这个问题归结为以下几点:

  • 没有任何matplotlib导入应用程序工作正常
  • 当“导入matplotlib”被添加到应用程序中的任何地方时,工作进程死亡与段错误和用户看不到从服务器的答复
  • “import matplotlib”在命令行python解释器中工作得很好 – segfault只发生在apache进程中

这里是日志条目:

[Tue May 24 08:29:08 2011] [notice] child pid 17576 exit signal Segmentation fault (11) 

我不能在其他电脑上重现问题。 我尝试删除(rm site-packages / matplotli *)并安装不同版本的matplotlib(0.99.3,1.0.0,1.0.1)我尝试在virtualenv中安装所有模块,并从我的.wsgi脚本指向virtualenv。

我试过这个: Error:child pid 6695 exit signal Segmentation fault(11)我也读了http://code.google.com/p/modwsgi/wiki/ 。

任何指针如何debugging/解决这个问题将不胜感激。

(我甚至准备移动到任何其他服务器(粘贴/ cherrypy + Apache的mod_proxy等),以消除这个问题。)

这里是我的Apache设置:

/ usr / sbin / httpd -V

 Server version: Apache/2.2.15 (Unix) Server built: Apr 10 2010 11:21:07 Server's Module Magic Number: 20051115:24 Server loaded: APR 1.3.9, APR-Util 1.3.10 Compiled using: APR 1.3.9, APR-Util 1.3.9 Architecture: 32-bit Server MPM: Prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APACHE_MPM_DIR="server/mpm/prefork" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=128 -D HTTPD_ROOT="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_LOCKFILE="logs/accept.lock" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" 

/ usr / sbin / httpd -l

 Compiled in modules: core.c prefork.c http_core.c mod_so.c 

/ usr / sbin / httpd -M

 Loaded Modules: core_module (static) mpm_prefork_module (static) http_module (static) so_module (static) auth_basic_module (shared) auth_digest_module (shared) authn_file_module (shared) authn_alias_module (shared) authn_anon_module (shared) authn_dbm_module (shared) authn_default_module (shared) authz_host_module (shared) authz_user_module (shared) authz_owner_module (shared) authz_groupfile_module (shared) authz_dbm_module (shared) authz_default_module (shared) ldap_module (shared) authnz_ldap_module (shared) include_module (shared) log_config_module (shared) logio_module (shared) env_module (shared) ext_filter_module (shared) mime_magic_module (shared) expires_module (shared) deflate_module (shared) headers_module (shared) usertrack_module (shared) setenvif_module (shared) mime_module (shared) dav_module (shared) status_module (shared) autoindex_module (shared) info_module (shared) dav_fs_module (shared) vhost_alias_module (shared) negotiation_module (shared) dir_module (shared) actions_module (shared) speling_module (shared) userdir_module (shared) alias_module (shared) rewrite_module (shared) wsgi_module (shared) ssl_module (shared) Syntax OK 

Apacheconfiguration

 <VirtualHost *:443> ServerName somesite.com DocumentRoot "/somedir" WSGIApplicationGroup %{GLOBAL} WSGIScriptAlias / /somedir/production.wsgi <..> </VirtualHost> 

在你说你读过的wiki中,你应该已经发现:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Debugging_Crashes_With_GDB

作为一个侧面说明,建议您不要使用prefork / embedded模式。 用户mod_wsgi守护进程模式,如果你被迫使用prefork MPM。 读:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html

为什么一些原因。

其他人已经得到了matplotlib mod_wsgi工作,所以不是直接问题是什么。