gpt4 book ai didi

python - 日志回滚时的主管异常导致应用服务器卡住?

转载 作者:行者123 更新时间:2023-11-28 17:42:44 26 4
gpt4 key购买 nike

我在 EC2 服务器上运行带有 gunicorn 的 flask 应用程序。我使用 supervisord 来监控和重启应用服务器。昨天,服务器没有响应 http 请求。我们使用 supervisorctl 查看状态,它显示为正在运行。我们查看了主管日志并看到以下错误:

CRIT uncaptured python exception, closing channel <POutputDispatcher at 34738328
for <Subprocess at 34314576 with name flask in state RUNNING> (stdout)>
(<type 'exceptions.OSError'>:[Errno 2] No such file or directory

[/usr/local/lib/python2.7/dist-packages/supervisor/supervisord.py|runforever|233]
[/usr/local/lib/python2.7/dist-packages/supervisor/dispatchers.py|handle_read_event|231]
[/usr/local/lib/python2.7/dist-packages/supervisor/dispatchers.py|record_output|165]
[/usr/local/lib/python2.7/dist-packages/supervisor/dispatchers.py|_log|141]
[/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|info|273]
[/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|log|291]
[/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|emit|186]
[/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|doRollover|220])

重新启动 supervisord 为我们解决了这个问题。以下是我们主管配置的相关部分:

[supervisord]
childlogdir = /var/log/supervisord/
logfile = /var/log/supervisord/supervisord.log
logfile_maxbytes = 50MB
logfile_backups = 10
loglevel = info
pidfile = /var/log/supervisord/supervisord.pid
umask = 022
nodaemon = false
nocleanup = false

[program:flask]
directory=%(here)s
environment=PATH="/home/ubuntu/.virtualenvs/flask/bin"
command=newrelic-admin run-program gunicorn app:app -c gunicorn_conf.py
autostart=true
autorestart=true
redirect_stderr=true

奇怪的是,我们有 2 台服务器在 ELB 后面运行,并且它们彼此相隔 10 分钟都遇到了同样的问题。我猜测两者的日志大约同时达到了限制(这是可能的,因为它们看到的流量大致相同)并且翻转失败。关于为什么会发生这种情况有什么想法吗?

最佳答案

AFAIK supervisor 使用它自己的日志记录实现,而不是 Python stdlib 中的日志实现——尽管类和方法名称非常相似。

在翻转期间删除文件时存在潜在的竞争条件 - 您需要检查特定 supervisor 版本的源代码并将其与最新的 supervisor 版本进行比较, 如果不同。以下是我系统上 supervisor 代码的摘录(在 doRollover() 方法中):

try:
os.remove(dfn)
except OSError, why:
# catch race condition (already deleted)
if why[0] != errno.ENOENT:
raise

如果您的翻转代码不执行此操作,您可能需要升级您的 supervisor 版本。

更新:如果错误发生在重命名时,则可能是尚未捕获的竞争条件。考虑询问 the supervisor mailing list .

关于python - 日志回滚时的主管异常导致应用服务器卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com