2017-04-08 7 views
0

新しい環境にアプリケーションを配置した後、かなり深刻な問題に直面しています。アプリケーション自体はSpring Boot REST APIサービスです。私のRESTコントローラメソッドが終了すると、@ControllerAdviceアノテーションを使って後処理を行うコントローラアドバイスクラスに進むことになっています。しかし、ログから、私はリクエストの約5%がタイムアウトしていることを見て、調査はコントローラメソッドの最後とコントローラのアドバイスとの間に15分のギャップがあることを明らかにした:Restコントローラメソッドの終了とコントローラアドバイスの間に15分のギャップがあります

Illustration of Timeout

ログ1は、 -5はControllerメソッドに属します。その後、30秒間待ってからZuulのタイムアウトの例外が表示されます。そして、15分後、この特定のスレッドのログがController Adviceのために再度実行されることがわかります。

なぜこのようなことが起こっているのか、アイデアが不足しています。このギャップは15分と非常に一致しているようです(10-15秒を与えるかまたは取る)。誰も似たような経験をしているのでしょうか、あるいはSpring/Bootのアーキテクチャを考えれば何が起こっているのでしょうか?

  • 接続タイムアウトあなたはソケット
  • 読み取りタイムアウトを確立する前にダイアログが進行中であると、

は、私はあなたがヒットしていると思う、:

+1

コードなしでデバッグを始めることさえ本当に始めることはできません。 [mcve] – CollinD

+0

15秒か15分ですか?あなたのタイトルは15秒です。 –

+0

申し訳ありません、それは15分です。修正されます。 – feicipet

答えて

0

タイムアウトの2種類があります。ここでの読み取りタイムアウトこの理論をテストするには、RestClientを使用してJUnit統合テストを作成し、タイムアウトパラメータを変更します。テストの動作によって問題が明らかになる可能性があります。

SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); 
    requestFactory.setConnectTimeout(5000); 
    requestFactory.setReadTimeout(5000); 
    RestTemplate restTemplate = new RestTemplate(requestFactory); 
関連する問題