Рабочий Mod_wsgi обрабатывает ошибку сегментации (11) - PullRequest
2 голосов
/ 24 мая 2011

У меня проблема с моим приложением django, которое размещено в apache / mod_wsgi. Я добавил в приложение код matplotlib, и теперь рабочие процессы apache завершаются сбоем.

Я уменьшил эту проблему до следующего:

  • Без каких-либо приложений импорта matplotlib работает нормально
  • когда в любом месте приложения добавляется «import 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 и указать на virtualenv из моего скрипта .wsgi.

Я попробовал это: Ошибка: выходной сигнал дочернего 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 config

<VirtualHost *:443>

    ServerName              somesite.com
    DocumentRoot            "/somedir"

    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptAlias / /somedir/production.wsgi

    <..>

</VirtualHost>

1 Ответ

3 голосов
/ 24 мая 2011

В вики, которую вы сказали, что прочитали, вы должны были найти:

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

В качестве примечания рекомендуется не использовать режим prefork / внедренный.Пользовательский режим демона mod_wsgi, если вы вынуждены использовать prefork MPM.Прочитайте:

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

по некоторым причинам, почему.

У других людей есть matplotlib, работающий с mod_wsgi, поэтому сразу не ясно, в чем проблема.

...