2011-05-23 82 views
2

我遇到與我的django應用程序,它與Apache/mod_wsgi託管的問題。我在應用程序中添加了一些matplotlib代碼,現在apache工作進程崩潰了。Mod_wsgi工作進程分段錯誤(11)

我降低了這個問題下面:

  • 沒有任何matplotlib進口申請工作正常
  • 當「進口matplotlib」在應用程序中的任何地方加入,工作進程死與段錯誤和用戶看不到的答覆從服務器
  • 「進口matplotlib」在命令行Python解釋器工作得很好 - 段錯誤只發生在Apache進程

這裏爲t他日誌條目:

[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/

有關如何調試/解決此問題的任何指針將不勝感激。

(我甚至準備移動到任何其他服務器(粘貼/ 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> 

回答

3

在你說你讀了維基,你應該已經發現:

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

作爲便箋,建議您不要使用prefork /嵌入模式。如果您被迫使用prefork MPM,用戶mod_wsgi守護進程模式。閱讀:

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

一些的原因。

其他人已經得到了matplotlib與mod_wsgi一起工作,所以直接問題不是很明顯。

+0

謝謝格雷厄姆,非常感謝。雖然我無法使用GDB調試崩潰(我無法關閉此特定服務器,但無法在不同計算機上重現此問題),但我會嘗試此操作併發布結果(如果有)。我使用cherrypy + mod_proxy作爲解決方法。 – user466176 2011-05-25 00:43:45

+1

如果使用mod_wsgi的守護進程模式,則不需要關閉整個服務器。您只需按照記錄將gdb附加到守護進程的pid,然後觸發請求導致失敗。 – 2011-05-25 07:08:11