接続を利用できません。5000ms後にリクエストがタイムアウトしました。最後に解決しました

       今日の問題は私を困らせ、何泊か分からない。この問題を解決するために、私のチームと私は多くの時間を費やしたが、結局それだけの価値があった!

       当初、問題はありませんでした:接続が利用できず、リクエストは5000ミリ秒後にタイムアウトしました。その時点で、データベース接続プールはまだC3P0であり、一部のビジネスSQL実行も非常に遅く、SQLの90%が10ミリ秒になることがわかりました内部(遅いSQLではない)ですが、時々、数千ミリ秒かかる実行が常に発生します。上記の現象はすべてピンポイントで観察されます。

       考えた結果、接続プールが古すぎるのではないかと思います。Javaを調べたところ、c3p0、dbcp、druid、hikaricpなどの人気のある接続プールがますます多く使用されています。インターネットでの比較も見ました。C3P0は確かにまさか、hikaricpが最高ですが、たまたまユニットがhikaricを押しているので、hikaricpに切り替えました。私は問題を解決する必要があると思いましたが、助けにはなりませんでした。pinpintを開いた後も同じです

execute()は引き続き長時間実行されますが、違いがあります。C3P0を使用する場合、PinpointはgetConnection()メソッドを追跡しません。今回は追加のgetConnection()メソッドがあり、場合によってはgetConnectionの時間が非常に長くなります。結局のところ、実行時間が短いメソッドで、1つは実行時間が比較的長いこと、もう1つはgetConnection時間が比較的長いことです。

      当初のこの現金不足は事業に影響を与えなかったため、その後の調査は行われませんでした。しかし、時間が経つにつれて新しい問題が発生し、ログはタイトルと同じデータベースエラーを報告し始めました。

org.springframework.jdbc.CannotGetJdbcConnectionException:JDBC接続を取得できませんでした。ネストされた例外はjava.sql.SQLTransientConnectionExceptionです:XXPool-接続が利用できません。要求は5000ms後にタイムアウトしました。

sqlの実行でエラーが報告されました、これ。それはビジネスに影響を与え始めました。もう我慢できません、チェックを続けてください。ピンポイントを再生して確認:

ログに対応して、後でこのエラーはますます大きくなった。接続プールの構成を確認しました

結論に達する:接続を待機しているためにタイムアウトしたため、接続プール内の接続は十分ではなく、上記のgetConnection()メソッドでも正しい(解決できないexecute()消費もある)期間)。

      hikaricpにアクセスするときに、hikaricp  の接続プールデータの一部MBean(JMX)モニタリング、アイドル接続、アクティブ接続、合計接続、待機接続を介してライブラリに格納しました。 WaitingとIdleも多数ありますが、接続プールがいっぱいのようではありません。接続リークですか?接続プールパラメータleakDetectionThresholdを追加して確認しました。接続リークはないことがわかりましたが、今回はログを介して、新しいエラーが見つかりました。

接続の問題の出現は死にました、私たちは一連の考えをしましょう!なぜ死んだのですか?

        接続プールからフェッチされた接続は停止しており、すべてのconnnection()に時間がかかるため、ソースコードを確認しました。接続をフェッチすると、hikaripcが接続をテストするため、接続プールに構成を追加します。

      パラメータが大きすぎて、新しいエラーがここに再び表示されます:java.sql.SQLTimeoutException:ORA-01013:ユーザーが現在の操作のキャンセルを要求しました

私はORA-01013をオンラインでチェックしましたが、その説明のほとんどはテーブルロックが原因でした。私は、旧友のPing An oracle Danielに質問し、テーブルロックの問題があるかどうかを尋ねました。テーブルの固定がこの問題の原因ですが、この問題は本当です必ずしもテーブルロックが原因ではなく、それがテーブルロックではないことがわかりました。そのとき、dbaを探しましたが、ロックテーブルが見つかりませんでした。

    再生しないと本当にチェックできません。チェックしてから約2週間になります。バージョンがいくつかあり、再生できません。大きくなる!今回は、dba、ミドルウェア、ホスト、ネットワーク、運用・保守の5つの分野でビッグウィッグをすべて集め、シェンロンを召喚しました。多くの人と力があるというのは本当に結論です:データベースへの適用には大きな遅れがあります!

       ストーリーの残りの部分は当てはまりません。ネットワークカード、ネットワークケーブルなどを変更するだけです。遅延の問題を解決しました、今回は本当に解決されました!

       ここに要約を示します。ソフトウェアは複雑なものであり、適用されるテクノロジーはさらに広範です。開発者としては、思考力や技術力はアプリケーション層だけにとどまり、下向き(外側)に考えたり、ネットワーク層やハードウェアに問題が発生したりはしませんでした。これはまた、私たちの開発技術に対する高い要求をもたらします。

また、問題(バグ)が発生しても、何も心配する必要はありません。問題が解決すると、バグがもたらす知識と成長が将来の価値になります。

         最後に、私のチームと同僚に感謝します。これからも一緒に頑張ります!結果に関係なく、一生懸命働きます。この記事が皆さんのお役に立てば幸いです。

おすすめ

転載: blog.csdn.net/kevin_mails/article/details/106131729