🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

963閲覧

Heroku上で稼働中のPython(Flask)アプリで時折「Application error」(H18)が発生する

maructy

総合スコア4

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/09/16 13:51

編集2019/09/17 12:31

前提・実現したいこと

Heroku上でPython3.x(Flask)アプリが稼働中です。
スマホからアクセスすると時折「Application error」という画面になります。
Herokuのログには「at=error code=H18 desc="Server Request Interrupted"」と出力されています。
同じ操作をしてもこのエラーが発生するとは限りません。

このエラーの発生を減らすor無くす方法が知りたいです。

発生している問題・エラーメッセージ

Heroku CLIから「heroku logs」コマンドで確認したところ、以下のようなログが出力されていました。

heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="XXX" host=XXX request_id=XXX fwd="XX.XX.XX.XX" dyno=web.1 connect=Xms service=XXms status=503 bytes= protocol=https

前後に関連するエラーメッセージは出力されていません。

Heroku Error Codesには以下のような記載があります。

H18 - Server Request Interrupted The backend socket, belonging to your app’s web process was closed before the backend returned an HTTP response.

該当のソースコード

Python

1@app.route("<URL>", methods=["POST"]) 2def <関数名>(): 3 : 4 () 5 : 6 return render_template("<HTMLファイル名>", <パラメーター>=<>)

このような関数が複数あり、どの関数でエラーが発生しやすい、といった傾向も無いようです。

試したこと

時間を置いて再度同じ操作を実行してみました。
同じエラーになる事もあれば、成功する事もありました。

時間を置かずに再読み込みすると同じエラーになる事が多かったです。
前のページに戻って同じ操作をすると、時間を置かなくても成功する事もありました。

補足情報(FW/ツールのバージョンなど)

Heroku
python-3.7.3
gunicorn==19.9.0
Flask==1.0.2

9/17追記 前後のログの内容

あまり参考にならないかもしれませんが、エラーが発生した前後のログを追記します。
行頭★印がエラーのログです。

Sep 16 00:48:46 <アプリ名> heroku/router: at=info method=GET path="<パス②>" host=<URL> request_id=<リクエストID> fwd="<IPアドレス>" dyno=web.1 connect=1ms service=21ms status=200 bytes=18350 protocol=https Sep 16 00:48:46 <アプリ名> app/web.1: <IPアドレス> - - [16/Sep/2019:16:48:46 +0900] "GET <パス②> HTTP/1.1" 200 18187 "<URL>" "<アクセス元のブラウザ等>" ★Sep 16 00:48:50 <アプリ名> heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="<パス③>" host=<URL> request_id=<リクエストID> fwd="<IPアドレス>" dyno=web.1 connect=1ms service=95ms status=503 bytes= protocol=https Sep 16 00:48:50 <アプリ名> app/web.1: 10.41.169.187 - - [16/Sep/2019:16:48:50 +0900] "POST <パス③> HTTP/1.1" 200 13763 "<URL>" "<アクセス元のブラウザ等>" Sep 16 00:48:57 <アプリ名> heroku/router: at=info method=POST path="<パス③>" host=<URL> request_id=<リクエストID> fwd="<IPアドレス>" dyno=web.1 connect=0ms service=75ms status=200 bytes=14085 protocol=https
Sep 16 04:21:21 <アプリ名> heroku/router: at=info method=GET path="<パス④>" host=<URL> request_id=<リクエストID> fwd="<IPアドレス>" dyno=web.1 connect=1ms service=112ms status=200 bytes=31467 protocol=https Sep 16 04:21:21 <アプリ名> app/web.1: 10.47.135.182 - - [16/Sep/2019:20:21:20 +0900] "GET <パス④> HTTP/1.1" 200 31145 "<URL>" "<アクセス元のブラウザ等>" ★Sep 16 04:21:30 <アプリ名> heroku/router: sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="<パス④>" host=<URL> request_id=<リクエストID> fwd="<IPアドレス>" dyno=web.1 connect=1ms service=79ms status=503 bytes= protocol=https Sep 16 04:21:31 <アプリ名> app/web.1: 10.47.135.182 - - [16/Sep/2019:20:21:30 +0900] "POST <パス④> HTTP/1.1" 200 31145 "<URL>" "<アクセス元のブラウザ等>" Sep 16 04:21:45 <アプリ名> heroku/router: at=info method=POST path="<パス⑤>" host=<URL> request_id=<リクエストID> fwd="<IPアドレス>" dyno=web.1 connect=0ms service=152ms status=200 bytes=30369 protocol=https

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nskydiving

2019/09/17 10:19

これだけの情報では原因の特定は難しいと思います。 「code=H18」ログの前後に、何か手掛かりとなりそうなログはないでしょうか?
maructy

2019/09/17 12:39 編集

反応くださり、ありがとうございます。 前後のログを追記致しました。 私には関連があるように判断できておりません。 こちらも関係無い情報かもしれませんが、 別の箇所でPythonの例外が発生した場合は、 ログに例外の内容等が出力されていました。
guest

回答1

0

解決されているかもしれませんが、通信状況は関係しそうでしょうか?

スマホとPC(?)でどちらも同じ無線環境だけど、スマホだけに発生する、など、特定につながるものがあれば.....。
あるいは、ブラウザによって差がでてくるかどうかとか。

投稿2019/09/20 09:12

suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maructy

2019/09/21 01:29

反応くださり、ありがとうございます。 きちんと確認した訳ではないのですが、スマホで起こりやすいようです。ただ当該サイトの性質上、スマホから見られやすいだけかもしれません。 私がエラーになる時は大抵、他のサイトは難なく表示できる通信状況で、エラーになる時は時間を掛けずにエラーが表示されるため、あまり通信状況は関係ないように思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問