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

Dockerを使ってDjangoとPostgreSQL環境を構築する方法

Dockerを使ってシンプルなDjangoとPostgreSQLの開発環境を構築する方法です。GitHubリポジトリをクローンして以下のコマンドを入力します。 1. Dockerイメージを作成 2. Djangoプロジェ […]

Posted on by press
Django

DjangoでQuerySetをpandasのDataFrameに変換する

DjangoでQuerySetで取得したデータをそのままpandasのDataFrameに変換する方法です。データを成形する必要がないときや、とりあえず全件CSV化したいときなどに便利な方法です。

Posted on by press