我遇到與我的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>
謝謝格雷厄姆,非常感謝。雖然我無法使用GDB調試崩潰(我無法關閉此特定服務器,但無法在不同計算機上重現此問題),但我會嘗試此操作併發布結果(如果有)。我使用cherrypy + mod_proxy作爲解決方法。 – user466176 2011-05-25 00:43:45
如果使用mod_wsgi的守護進程模式,則不需要關閉整個服務器。您只需按照記錄將gdb附加到守護進程的pid,然後觸發請求導致失敗。 – 2011-05-25 07:08:11