[フェイルシュート]上流タイムアウト(110:Connectionタイムアウト)エラー
2607 ワード
エラー
サーバを実行すると、最初は正常に動作します.10分後に接続すると、サーバはAPI要求を処理できません.
Gunicorn Log
Nginx Log
問題の原因を特定
どこが問題なのかを知るために、Nginx、Guncornで彼を確認した.
Guiconlogで見たのに、Flaskサーバーを確認.
では、DBからデータをロードする問題かもしれないので、DBログを見ました.
DBはAWS RDSを使用しているので、AWSホームページで確認します.
Got timeoutが通信パケットを読み込み、Got an errorが通信パケットを読み込むなどのエラーが発生した.
もしそうであれば,データベースがクエリを処理できず,サーバがAPI要求を処理できないと推定できる.
でもDBに何か問題があったのか...Googleで関連エラーを検索しました.
クエリ文が長すぎるため、DB設定のinteractive timeout設定値を超えています.だから私は時間を測った.しかし、0.008秒になってから0.01秒の実行速度を示すという言葉は納得できない.
しかし
timeout
という言葉を見て、DBの時間設定部分とどのように動くかを学びました.https://okky.kr/article/540700以降、次の記事が見つかりました.
つまり、データベースにクエリーがなくなり、接続が中断してエラーが発生しました.
これは問題だと思い、DBの設定値をチェックしました.
show variables like 'wait_timeout';
wait_timeout
オプションとは、アクティブでない接続を切断する前にサーバが待機する時間です.すなわち、接続が確立されているが、クエリがこの間送信されていない場合、切断されます.定価は28800です.8時間後に掛けたということですが、うん...8時間以内にちゃんと...と思います.それはこれからも勉強を続けますまずこの問題を解決しましょう.
解決策
そこで,無意味なクエリーを展開し,連絡を維持する方法を探した.
Flask-SQLAlchemyには
pool_recycle
のオプションがあります.データベースに設定されたwait_timeout
が接続を切断する前に、接続を維持するために無意味なクエリーが行われます.SQLALCHEMY_ENGINE_OPTIONS = {
'pool_recycle': 120
}
これは、次のように設定されている場合、120秒ごとにデータベース・クエリーが実行されることを意味します.注意事項はDB設定の
wait_timeout
より小さく設定した方が意味があります.とりあえず、このように設定してから、再配置しました.エラーは表示されず、正常に動作していることを確認しました.
三日ぐらいはこれで苦労しました.Nginx、Guncorn設定などに触れてみましたが、やはりログを見ていて、一つ一つついていくと、答えがあることに気づきました.
リファレンス
https://sjinstorage.blogspot.com/2019/11/got-timeout-reading-communication.html
https://yongho1037.tistory.com/569
https://pythonq.com/so/docker/1133414
Reference
この問題について([フェイルシュート]上流タイムアウト(110:Connectionタイムアウト)エラー), 我々は、より多くの情報をここで見つけました https://velog.io/@jeong-god/트러블-슈팅-upstream-timed-out-110-Connection-timed-out-에러テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol