/ / Nginx + Gunicorn + Flask - 使用からX時間後の> 500定数のエラー - python、nginx、flask

Nginx + Gunicorn + Flask - X時間使用後の一定の500エラー - python、nginx、フラスコ

私は問題なく通常Nginx + Gunicornで動いているFlaskアプリを持っています。アプリはまだ開発中であるため、現時点では1時間あたり約1つの要求しかありません。

問題はGunicornが突然そうに見えることです最後の再起動から約12〜36時間後に必ずクラッシュします。これが起こっても、nginxはまだ静的ファイルを処理できますが、Gunicornプロセスがまだサーバー上で実行されていても、Gunicornを必要とするものは500エラーを返し始めます。次の方法でGunicornを再起動することで、問題は今後12〜36時間に解決されます sudo supervisorctl restart xxx (nginxの再起動は不要です)問題はこれまでに約10回発生しています。ロギングをどうにかして改善すること、または何か他のことをすることは可能でしょうか?

Nginx conf (/ etc / nginx / sites-available / xxx_gunicorn):

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

access_log /var/log/nginx/xxx-access.log;

server_name 127.0.0.1 www.xxx.yy;

location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-For  $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_pass http://127.0.0.1:8000/;
}

location /static {
alias  /opt/xxx/static/;
}
}

gunicornを起動するためのスーパーバイザーconf (/etc/supervisor/conf.d/xxx.conf)

[program:xxx]
command = gunicorn xxx:app -b localhost:8000 --debug --log-level debug --log-file /var/log/gunicorn.log --error-logfile /var/log/gunicorn.error.log --workers 2 --worker-connections 1000 --max-requests 100 --timeout 30
directory = /opt/xxx
user = ubuntu
stdout_logfile = /var/log/gunicorn.log ; Where to write log messages
autostart=true
autorestart=true
redirect_stderr=true

xxx.py

...
app = Flask(__name__)
...
if __name__ == "__main__":
app.debug=True
app.run()

/var/log/gunicorn.error.log 注:500エラーが発生したときに何も記録されません。 500エラーの前にも疑わしい行はありません。

/var/log/gunicorn.log :疑わしい行はありません。

/var/log/nginx/error.log :疑わしい行はありません。

/var/log/nginx/xxx-access.log :500エラーがここに表示されます。

80.221.255.134 - - [27/Jan/2015:07:01:50 +0000] "GET / HTTP/1.1" 500 291 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36"

回答:

回答№1は1

私はgunicorn haven "tオプションを知っているように ログファイル、のみ access-logfile そして エラーログファイル

http://gunicorn-docs.readthedocs.org/en/latest/settings.html#logging

しかし、あなたのフラスコアプリケーションにエラーを記録するためには、その中にpython loggerを設定しなければなりません。たとえば、次のようにします。

from logging.handlers import WatchedFileHandler

@app.before_first_request
def setup_logging():
"""
Setup logging
"""
handler = WatchedFileHandler("/var/log/your_flask_app.log")
app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO)