python - 在 ElasticBeanstalk 配置中设置 Python WSGIDaemon --maximum-requests 值
问题描述
我正在寻找有关如何--maximum-requests
在运行 Django 的 AWS ElasticBeanstalk Python 环境中设置值的说明。请注意,此环境未使用 Linux 2 映像,因此 gunicorn 不是一个选项,也不是使用 procfile。
maximum-requests=nnn 定义守护进程在关闭和重新启动之前应处理的请求数限制。
当您遇到与 Python 对象引用计数周期相关的问题或内存缓存使用不正确时,这可能会用于定期强制重启 WSGI 应用程序进程,这会导致内存不断增长。
如果未定义此选项,或者定义为 0,则守护进程将是持久的,并将继续为请求提供服务,直到 Apache 本身重新启动或关闭。
避免将其设置为处理大量流量的站点上的少量请求。这是因为 WSGI 应用程序的不断重启和重新加载可能会导致系统上不必要的负载并影响性能。仅当您因内存使用问题而别无选择时才使用此选项。解决任何内存问题后立即停止使用它。
您可以将graceful-timeout 选项与此选项结合使用,以减少由于使用此选项而发生重新启动时活动请求被中断的可能性。
解决方案
为了做到这一点,我必须在我的 .ebextensions 文件夹中创建一个包含以下内容的配置。
您需要从服务器复制 wsgi.conf 文件,以确保您首先拥有正确的 EB 设置。
files:
"/opt/elasticbeanstalk/local/override_wsgi_conf.py":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env python
import os
import sys
sys.path.append(os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
import config
MY_APACHE_TEMPLATE = r'''
# Customized wsgi.conf. If you're seeing this, good!
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On
<VirtualHost *:80>
Alias /static/ /opt/python/current/app/static/
<Directory /opt/python/current/app/static/>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /opt/python/current/app/key_collector_backend/wsgi.py
<Directory /opt/python/current/app/>
Require all granted
</Directory>
WSGIDaemonProcess wsgi processes=3 threads=20 maximum-requests=10000 display-name=%{GROUP} \
python-home=/opt/python/run/venv/ \
python-path=/opt/python/current/app user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi
</VirtualHost>
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
WSGIPassAuthorization On
WSGIApplicationGroup %{GLOBAL}
'''
def main():
try:
WSGI_STAGING_CONFIG = config.get_container_config('wsgi_staging_config')
print 'Overriding WSGI configuration in %s' % WSGI_STAGING_CONFIG
open(WSGI_STAGING_CONFIG, 'w').write(MY_APACHE_TEMPLATE)
except Exception, e:
config.emit_error_event(config.USER_ERROR_MESSAGES['badappconfig'])
config.diagnostic("Error generating config during configdeploy/pre: %s"
% str(e))
sys.exit(1)
if __name__ == '__main__':
config.configure_stdout_logger()
main()
commands:
5_app_deploy_dir:
command: "mkdir -p /opt/elasticbeanstalk/hooks/appdeploy/pre"
5_config_deploy_dir:
command: "mkdir -p /opt/elasticbeanstalk/hooks/configdeploy/pre"
10_app_deploy_file:
command: "cp -p /opt/elasticbeanstalk/local/override_wsgi_conf.py /opt/elasticbeanstalk/hooks/appdeploy/pre/90_override_wsgi_conf.py"
20_config_deploy_file:
command: "cp -p /opt/elasticbeanstalk/local/override_wsgi_conf.py /opt/elasticbeanstalk/hooks/configdeploy/pre/90_override_wsgi_conf.py"
有关完整详细信息,请参阅此线程。 https://forums.aws.amazon.com/thread.jspa?threadID=163369
推荐阅读
- testing - 服务器的“Cache-Control”标头如何影响 TestCafe 服务器
- r - 从 R 中的 Google Earth KML 文件中提取详细信息
- spring - Spring boot - 绑定属性【配置属性】
- c# - asp-action 在端点路由区域中无法正常工作
- python - 设置levenshtein距离的成本?
- pyspark - 通过 PySpark 查询执行错误 - GC 错误
- python - pandas groupby 在哪里和其他地方
- php - 联系表 - 未提供任何参数
- java - 我如何从枚举中调用?
- r - 在 data.table 中设置并行化;适用于 for 循环;但 foreach %dopar% 不适用;foreach %do% 有效