Mod_wsgi worker处理分段错误11

问题描述

| 我的Django应用程序存在问题,该应用程序由apache / mod_wsgi托管。我在应用程序中添加了一些matplotlib代码,现在apache worker进程崩溃了。 我将此问题简化为以下内容: 没有任何matplotlib导入应用程序就可以了 当将“导入matplotlib \”添加到应用程序中的任何位置时,辅助进程会因segfault而终止,并且用户看不到服务器的答复 \“ 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。 我尝试了这个: 错误:孩子pid 6695退出信号分段错误(11) 我也阅读了http://code.google.com/p/modwsgi/wiki/。 任何有关如何调试/解决此问题的指针将不胜感激。 (我什至准备移至任何其他服务器(paste / 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
Apache配置
<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 MPM,请使用用户mod_wsgi守护程序模式。读: http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html 由于某些原因。 其他人已经使matplotlib与mod_wsgi一起工作,因此问题出在哪里并不清楚。