技術系TIPS
PR

SpringBootにkeepaliveのtimeout設定をする

saratogax
記事内に商品プロモーションを含む場合があります

AWS の環境で ELB(ALB)のアイドルタイムアウトの設定を変更する際、意識しておかなければいけなのがバックエンド側の KeepAlive やタイムアウト設定です。

For backend connections, we recommend that you enable the HTTP keep-alive option for your EC2 instances. You can enable HTTP keep-alive in the web server settings for your EC2 instances. If you enable HTTP keep-alive, the load balancer can reuse backend connections until the keep-alive timeout expires.

バックエンド接続では EC2 インスタンスで HTTP キープアライブオプションを有効にすることが推奨されます。EC2 インスタンスのウェブサーバー設定で HTTP キープアライブを有効にできます。HTTP キープアライブを有効にすると、ロードバランサーはキープアライブのタイムアウト期間が終了するまで、バックエンド接続を再利用できます。

Connection idle timeout

バックエンド側が Apache や Nginx のケースはこれまでに何度も経験してきましたが、SpringBoot(Tomcat)の場合はどうすればいいでしょうか。

今回はその辺を探っていきたいと思います。

デフォルトのKeepAliveTimeout

まず、何も特別な設定をしない場合の「KeepAlive Timeout」の値が何になっているのか確認します。

actuator を設定して env や configprops を確認しても、こちらが意図的に指定した内容しか確認できなかったので、起動後にプログラムから確認します。

下記の公式ドキュメントを参考に、「keepAliveTimeout」と「connectionTimeout」の設定値を確認します。

server.tomcat.keep-alive-timeout
server.tomcat.connection-timeout

っと何気なく書きましたが、サクッと Kotlin でサンプルを作ってみましょう。

これで確認する限り、デフォルトは 60 秒(60000ms)のようです。

override fun customize(factory: TomcatServletWebServerFactory) {
    factory.addConnectorCustomizers(TomcatConnectorCustomizer { connector ->
        val protocol = connector.getProtocolHandler() as AbstractHttp11Protocol<*>
        // protocol.keepAliveTimeout
        // protocol.connectionTimeout
    })
}

keepAliveTimeoutの設定

公式のドキュメントには、keepAliveTimeout の設定を上書きする項目はないようですが、connectionTimeout の値と同じにしてくれるようです。

server.connection-timeout= # Time that connectors wait for another HTTP request before closing the connection. When not set, the connector’s container-specific default is used. Use a value of -1 to indicate no (that is, an infinite) timeout.

Common application properties

よって、application.yaml で設定をします。120 秒にしたい場合はこんな感じ。

これで、keepAliveTimeout も connectionTimeout も 120 秒となります。

server.connection-timeout: 120000
ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました