J'ai un problème avec mon application django hébergée avec apache/mod_wsgi. J'ai ajouté du code matplotlib dans l'application, et les processus de travail apache se bloquent maintenant.Mod_wsgi worker processes segmentation fault (11)
Je réduit ce problème à ce qui suit:
- sans aucune application importations matplotlib fonctionne bien
- lorsque « matplotlib à l'importation » est ajouté partout dans l'application, les processus de travail meurent avec segfault et les utilisateurs ne voient pas la réponse du serveur
- "matplotlib import" fonctionne très bien dans l'interpréteur python de ligne de commande - segfault ne se produit que dans les processus apache
est ici t il entrée du journal:
[Tue May 24 08:29:08 2011] [notice] child pid 17576 exit signal Segmentation fault (11)
Je ne peux pas reproduire le problème sur un autre ordinateur. J'ai essayé d'enlever (rm site-packages/matplotli *) et installer différentes versions de matplotlib (0.99.3, 1.0.0, 1.0.1) J'ai essayé d'installer tous les modules dans virtualenv et pointez sur virtualenv à partir de mon .wsgi scénario.
J'ai essayé ceci: Error: child pid 6695 exit signal Segmentation fault (11) Je lis http://code.google.com/p/modwsgi/wiki/ aussi bien. Tous les pointeurs sur la façon de déboguer/contourner ce problème seront très appréciés.
(je suis même prêt à passer à un autre serveur (pâte/cherrypy + apache mod_proxy, etc.) pour éliminer le problème.)
Voici mes paramètres 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 config
<VirtualHost *:443>
ServerName somesite.com
DocumentRoot "/somedir"
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias//somedir/production.wsgi
<..>
</VirtualHost>
Merci Graham, très apprécié. Bien que je ne pouvais pas déboguer des plantages avec GDB (je ne peux pas éteindre ce serveur particulier et ne peux pas reproduire le problème sur un autre ordinateur), je vais essayer ceci et afficher les résultats le cas échéant. J'utilise cherrypy + mod_proxy comme solution de contournement. – user466176
Si vous utilisez le mode démon de mod_wsgi, vous n'avez pas besoin d'éteindre tout le serveur. Vous attachez simplement gdb à pid du processus du démon tel que documenté, puis déclenchez la demande pour provoquer l'échec. –