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 | 高速化されたHTTP | 8443 (HTTPS) |
| AJP | Apache連携用プロトコル | 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 |
keepAliveTimeout | Keep-Aliveタイムアウト(ms) | connectionTimeout |
maxKeepAliveRequests | 1接続あたりの最大リクエスト数 | 100 |
スレッド関連
| パラメータ | 説明 | デフォルト |
|---|---|---|
maxThreads | 最大スレッド数 | 200 |
minSpareThreads | 最小待機スレッド数 | 10 |
acceptCount | 待機キューの最大長 | 100 |
バッファ関連
| パラメータ | 説明 | デフォルト |
|---|---|---|
maxHttpHeaderSize | HTTPヘッダーの最大サイズ | 8192 |
maxPostSize | POSTデータの最大サイズ | 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 refused | Tomcat未起動/ポート競合 | プロセス・ポート確認 |
| Connection timeout | サーバー過負荷 | maxThreads増加 |
| 413 Request Entity Too Large | POSTサイズ超過 | maxPostSize増加 |
ログの確認
# アクセスログ
tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt
# Catalinaログでコネクタ情報確認
grep -i "coyote" $CATALINA_HOME/logs/catalina.out
関連項目
- Apache Tomcat - Tomcatの概要
- Catalina - サーブレットコンテナ
- Jasper - JSPエンジン