问题描述
|
我的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一起工作,因此问题出在哪里并不清楚。