Coyote(Tomcat HTTPコネクタ)

作成日:
Java Tomcat HTTP

概要

Coyoteは、Apache Tomcat のHTTPコネクタコンポーネント。クライアントからのHTTPリクエストを受け付け、Catalina(サーブレットコンテナ)に渡す役割を担う。

名前の由来

北米に生息する野生のイヌ科動物「コヨーテ」から。Tomcat(トム猫)のテーマに沿った動物名が選ばれた。

役割

  • HTTPリクエストの受信: クライアントからのHTTPリクエストをパース
  • レスポンスの送信: Catalinaからのレスポンスをクライアントに返す
  • プロトコル処理: HTTP/1.1、HTTP/2、AJPなどのプロトコルを処理
  • SSL/TLS処理: HTTPS接続の暗号化・復号化
  • コネクション管理: Keep-Alive、コネクションプーリング

サポートするプロトコル

プロトコル説明デフォルトポート
HTTP/1.1標準のHTTPプロトコル8080
HTTP/2高速化されたHTTP8443 (HTTPS)
AJPApache連携用プロトコル8009

コネクタの種類

BIO(Blocking I/O)

  • 従来の同期I/O方式
  • Tomcat 8.5以降で非推奨・削除

NIO(Non-blocking I/O)

  • Java NIOを使用した非同期I/O
  • 現在のデフォルト
  • 高い同時接続数に対応

NIO2

  • Java 7のNIO.2 APIを使用
  • 非同期I/Oのさらなる改善

APR(Apache Portable Runtime)

  • ネイティブライブラリを使用
  • 最高のパフォーマンス
  • 別途APRライブラリのインストールが必要

server.xml での設定

基本的なHTTPコネクタ

<Connector port="8080" 
           protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

NIOコネクタ(明示的に指定)

<Connector port="8080" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="200"
           connectionTimeout="20000"
           redirectPort="8443" />

HTTPSコネクタ

<Connector port="8443" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150"
           SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.jks"
                     certificateKeystorePassword="changeit"
                     type="RSA" />
    </SSLHostConfig>
</Connector>

AJPコネクタ

<Connector port="8009" 
           protocol="AJP/1.3"
           redirectPort="8443"
           secretRequired="true"
           secret="your-secret-key" />

主要な設定パラメータ

接続関連

パラメータ説明デフォルト
portリッスンポート8080
connectionTimeout接続タイムアウト(ms)20000
keepAliveTimeoutKeep-Aliveタイムアウト(ms)connectionTimeout
maxKeepAliveRequests1接続あたりの最大リクエスト数100

スレッド関連

パラメータ説明デフォルト
maxThreads最大スレッド数200
minSpareThreads最小待機スレッド数10
acceptCount待機キューの最大長100

バッファ関連

パラメータ説明デフォルト
maxHttpHeaderSizeHTTPヘッダーの最大サイズ8192
maxPostSizePOSTデータの最大サイズ2097152 (2MB)

パフォーマンスチューニング例

高負荷環境向け設定

<Connector port="8080" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="500"
           minSpareThreads="50"
           acceptCount="200"
           connectionTimeout="10000"
           enableLookups="false"
           compression="on"
           compressionMinSize="2048"
           compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json" />

設定のポイント

設定効果
maxThreads 増加同時リクエスト処理数向上
enableLookups="false"DNSルックアップ無効化で高速化
compression="on"レスポンス圧縮でネットワーク負荷軽減

Apache HTTP Server との連携

AJP接続(mod_proxy_ajp)

# Apache側設定
<VirtualHost *:80>
    ServerName example.com
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

HTTP接続(mod_proxy_http)

# Apache側設定
<VirtualHost *:80>
    ServerName example.com
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

モニタリング

JMXでの監視

Coyoteの状態はJMX経由で監視可能:

Catalina:type=ThreadPool,name="http-nio-8080"

主な監視項目:

  • currentThreadCount - 現在のスレッド数
  • currentThreadsBusy - 使用中のスレッド数
  • connectionCount - 現在の接続数

トラブルシューティング

よくある問題

問題原因対処
Connection refusedTomcat未起動/ポート競合プロセス・ポート確認
Connection timeoutサーバー過負荷maxThreads増加
413 Request Entity Too LargePOSTサイズ超過maxPostSize増加

ログの確認

# アクセスログ
tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt

# Catalinaログでコネクタ情報確認
grep -i "coyote" $CATALINA_HOME/logs/catalina.out

関連項目