Navigation

Related Articles

Back to Latest Articles

Djangoで502 Bad Gatewayが頻発した時に調べたこと


press
Djangoで502 Bad Gatewayが頻発した時に調べたこと

Djangoで開発中のWebアプリで特定のURLにアクセスした時だけ、502 Bad Gatewayが頻発する様になりました。NginxとuWSGIのログを見たらuWSGIのworkerが死んで復活してを繰り返していることが判明しました。

uWSGI logs

DAMN ! worker 1 (pid: 25042) died, killed by signal 9 :( trying respawn ...
Respawned uWSGI worker 1 (new pid: 25759)

nginx errors.log(一部抜粋)

upstream prematurely closed connection while reading response header from upstream

データベースの集計結果を表示するURLだったので、最初はQuerySetが原因だと思いQuerySetを書き直してみましたが(ここでNginxとuWSGIのタイムアウト時間を伸ばしたりもしました)、変化はありませんでした。

次にメモリの状況を調べてみたところ、ほぼ空きがなかったのでメモリを解放しましたが、こちらもほとんど変わらず改善されませんでした。

最終的に実行中のプロセスを表示したら、uWSGIが数十件実行中になっているのが分かり、uWSGIを一旦killして再度実行することで502 Bad Gatewayは出なくなりました。

実行中のプロセス表示

ps aux | grep uwsgi

uWSGIをkill

killall -9 uwsgi

原因はプログラムを修正した時にuWSGIをkillせずに実行を繰り返したので、uWSGIが次々と実行されてメモリが圧迫されQuerySetが収まり切らなくなったことでした。

uWSGIをkillした後にfreeでメモリの空き状況を確認したところ十分に空きができていました。


当ブログは群馬県でPython / Djangoを中心にウェブアプリケーションを開発している株式会社ファントムが運営しています。

株式会社ファントムへのお問い合わせ




    Show Comments (0)

    Comments

    Related Articles

    Django

    Djangoのi18n用にGNU gettextをインストール

    Djangoのi18n用にGNU gettextをインストール 上記コマンドを実行したときにGNU gettextがインストールされていないと以下のエラーが発生します。 エラーを解決するにはGNU gettextのインス […]

    Posted on by press
    Django

    DjangoとChannelsで簡単なチャットサーバーを構築(3)

    前回からの続きです。 チャンネルレイヤーを有効化 チャンネルレイヤーを使用するためにバックエンドにRedisを使用します。Redisを使用するためにDockerを起動します。 以下のコマンドを実行してRedisを起動しま […]

    Posted on by press