【发布时间】:2026-01-26 11:15:02
【问题描述】:
我正在测试我的 Python Flask Web 应用程序在 Apache Web 服务器上运行的限制,方法是发出一个需要 30 多分钟才能完成的请求。该请求需要对 MySQL 数据库的数千个数据库请求(一个接一个)。我知道这应该在理想情况下作为 apache 服务器之外的一个单独的异步进程运行,但现在让我们忽略它。我遇到的问题是,虽然当我在我的 mac 上测试它时它完全运行,但在 linux 服务器(AWS EC2 上的 Amazon linux)上运行它时它突然死亡。我一直无法弄清楚到底是什么杀死了它。我已经检查过服务器没有内存不足。该过程使用很少的 RAM。我找不到任何对我有意义的 Apache 配置参数或任何错误消息(即使在将 apache logLevel 设置为调试之后)。请我在哪里寻找帮助。以下是有关我的设置的更多详细信息:
运行时间
服务器:分别在 8 分钟、27 分钟、21 分钟和 22 分钟后死亡。请注意,这些运行大部分都在 UAT 服务器上,这是服务器正在处理的唯一请求。
Mac:它的运行速度比在服务器上运行要慢得多。该过程成功运行,耗时 2 小时 47 分钟。
Linux 服务器详情:
2 个虚拟 CPU 和 4GB RAM
操作系统(uname -a 的输出)
Linux ip-172-31-63-211 3.14.44-32.39.amzn1.x86_64 #1 SMP Thu Jun 11 20:33:38 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Apache 错误日志: https://drive.google.com/file/d/0B3XXZfJyzJYsNkFDU3hJekRRUlU/view?usp=sharing
Apache 配置文件: https://drive.google.com/file/d/0B3XXZfJyzJYsM2lhSmxfVVRNNjQ/view?usp=sharing
Apache 版本(apachectl -V 的输出)
Server version: Apache/2.4.23 (Amazon)
Server built: Jul 29 2016 21:42:17
Server's Module Magic Number: 20120211:61
Server loaded: APR 1.5.1, APR-UTIL 1.4.1
Compiled using: APR 1.5.1, APR-UTIL 1.4.1
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-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=256
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/var/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
Mac 详细信息:
Apache 配置文件: https://drive.google.com/file/d/0B3XXZfJyzJYsRUd6NW5NY3lON1U/view?usp=sharing
Apache 版本(apachectl -V 的输出)
Server version: Apache/2.4.18 (Unix)
Server built: Feb 20 2016 20:03:19
Server's Module Magic Number: 20120211:52
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_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=256
-D HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/bin/suexec"
-D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"
【问题讨论】:
-
根据您提供的信息,任何人现在能做的最好的事情就是猜测,因为没有足够的信息继续下去。至少将 Apache 的
LogLevel设置为info并查看 mod_wsgi 关于进程重启的说法。还要验证您实际上正在使用 mod_wsgi 守护程序模式,正如已经指出的那样可能是一个问题。见modwsgi.readthedocs.io/en/develop/user-guides/…
标签: apache python-2.7 amazon-ec2 flask mod-wsgi