Tomcat Nativeを使用してTomcat IO効率を向上させる方法の詳細な説明

Tomcat Nativeを使用してTomcat IO効率を向上させる方法の詳細な説明

導入

IO には、初期のブロック IO から、非ブロッキング IO、IO 多重化、非同期 IO まで、段階的に IO のパフォーマンスを最大化するためのさまざまな種類があります。

今日はTomcat Nativeを使用してTomcat IOの効率を向上させる方法を紹介します。

Tomcatへの接続方法

コネクタは、Tomcat で外部クライアントとの通信を処理するために使用されます。コネクタは主に、外部クライアントからのリクエストを受け入れ、処理エンジンに転送して処理するために使用されます。

Tomcat には 2 種類のコネクタがあります。 1 つは HTTP コネクタで、もう 1 つは AJP コネクタです。

HTTP コネクタは誰もがよく理解しているはずです。これは Tomcat が使用するデフォルトのコネクタでもあります。

また、AJP と呼ばれるコネクタもあり、これは主に Web サーバーとの通信に使用されます。AJP プロトコルは HTTP よりも高速であるため、他の Web サーバーとの通信に加えて、AJP を使用して Tomcat クラスターを構築することもできます。

どちらの方法も、BIO、NIO、NIO2、APR の 4 つのプロトコルをサポートしています。

#次の 4 つのコネクタ実装はすべて、クライアントからの HTTP 要求を直接処理します。org.apache.coyote.http11.Http11Protocol: HTTP/1.1 プロトコルをサポートするコネクタ。

org.apache.coyote.http11.Http11NioProtocol: HTTP/1.1 プロトコル + New IO をサポートするコネクタ。

org.apache.coyote.http11.Http11Nio2Protocol: HTTP/1.1 プロトコル + New IO2 をサポートするコネクタ。

org.apache.coyote.http11.Http11AprProtocol : APR (Apacheポータブルランタイム)テクノロジーを使用するコネクタ。ネイティブ


#ウェブサーバーを扱うための実装方法は以下の4つです。org.apache.coyote.ajp.AjpProtocol: AJPプロトコルコネクタを使用してウェブサーバー(Apache httpdなど)との通信を実現します。org.apache.coyote.ajp.AjpNioProtocol: SJPプロトコル+新しいIO

org.apache.coyote.ajp.AjpNio2Protocol: SJP プロトコル + 新しい IO2

org.apache.coyote.ajp.AjpAprプロトコル: AJP + APR

それぞれの違いについてお話ししましょう。BIO はブロック IO であり、最も基本的な IO 方式です。次のように設定します。

<コネクタポート="8080" 
プロトコル="HTTP/1.1"
 
最大スレッド数 = "150" 
接続タイムアウト = "20000" 
リダイレクトポート=”8443” />

Tomcat バージョン 7 未満は、デフォルトで bio モードで実行されます。 Tomcat 8.5 以降、Tomcat は BIO のサポートを削除しました。

New IO は、java.nio パッケージとそのサブパッケージに基づいた IO メソッドです。ノンブロッキング IO モードを提供でき、従来の BIO よりも効率的な操作効率を実現します。

新しい IO を次のように構成します。

<コネクタ ポート="8080" プロトコル="org.apache.coyote.http11.Http11NioProtocol"
接続タイムアウト = "20000"
リダイレクトポート="8443" />

New IO と New IO2 の違いは何ですか?

新しい IO2 は、tomcat8 で導入された IO メソッドです。次のように設定できます。

<コネクタ ポート="8080" プロトコル="org.apache.coyote.http11.Http11Nio2Protocol"
接続タイムアウト = "20000"
リダイレクトポート="8443" />

apr メソッドは高度であり、これが今日説明する tomcat ネイティブの主な機能です。

APR と Tomcat ネイティブ

apr の完全な名前は Apache Portable Runtime で、非常に移植性の高いライブラリであり、Apache HTTP Server 2.x の中核です。 APR には、高レベルの IO 機能 (sendfile、epoll、OpenSSL など)、OS レベルの機能 (乱数の生成、システム ステータスなど)、ネイティブ プロセス処理 (共有メモリ、NT パイプ、Unix ソケット) へのアクセスなど、多くの用途があります。

Tomcat は、JNI の形式で Apache HTTP サーバーのコア ダイナミック リンク ライブラリを呼び出して、ファイルの読み取りやネットワーク転送操作を処理できるため、静的ファイルの Tomcat の処理パフォーマンスが大幅に向上します。

APR を使用すると、次の機能が得られます。

  • 非ブロッキング I/O と要求接続の維持。
  • OpenSSL および TLS/SSL をサポートします。

Tomcat Native は、Tomcat が APR を使用できるようにするライブラリです。

したがって、Tomcat Native を使用するための前提条件は、APR ライブラリ、OpenSSL、および JDK をインストールすることです。

apr と openssl は次の方法でインストールできます。

Debian ベースの Linux システム:

apt-get で libapr1.0-dev と libssl-dev をインストールします。

rpm ベースの Linux システム:

yum インストール apr-devel openssl-devel

Windows では、tcnative は dll の形式で提供されており、直接ダウンロードして使用することができます。

ただし、Linux ではプラットフォームが異なるため、tcnative を Linux で独自にコンパイルする必要があります。

一般的に、tcnative のソース パッケージは bin/tomcat-native.tar.gz にあります。解凍してください。

まず configure コマンドを実行します。

./configure --with-apr=/usr/bin/apr-1-config \
  --with-java-home=/home/jfclere/JAVA/jdk1.7.0_80/ \
  --with-ssl=はい\
  --prefix=$CATALINA_HOME

次に、make 操作を実行します。

作成 && インストール

生成された lib ファイルは $CATALINA_HOME/lib に配置されます。

tomcat で APR を使用する

tcnative をインストールすると、Tomcat で APR を使用できるようになります。

まず、conf/server.xml に次の構成があるかどうかを確認します。

<リスナークラス名="org.apache.catalina.core.AprLifecycleListener" SSLEngine="オン" />

次に、$CATALINA_HOME/bin/setenv.sh を変更して、tc-native lib ファイルを LD_LIBRARY_PATH に追加する必要があります。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
LD_LIBRARY_PATHをエクスポートする

最後に、APR 接続を追加します。

<コネクタ ポート="8080" プロトコル="org.apache.coyote.http11.Http11AprProtocol"
接続タイムアウト = "20000"
リダイレクトポート="8443" />

ただ実行するだけです。

ログから次のことがわかります。

org.apache.catalina.core.AprLifecycleListener の初期化

情報: APR ベースの Apache Tomcat ネイティブ ライブラリ 1.xy がロードされました

org.apache.catalina.core.AprLifecycleListener の初期化

情報: APR 機能: IPv6 [true]、sendfile [true]、accept フィルター [false]、ランダム [true]。

org.apache.coyote.http11.Http11AprProtocol の初期化

これは、APR がインストールされ、使用されていることを示します。

Tomcat Native を使用して Tomcat IO 効率を向上させる方法についての記事はこれで終わりです。Tomcat Native を使用して Tomcat IO 効率を向上させる方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ネイティブ APR モードで Tomcat をインストールおよび構成するチュートリアル
  • Tomcatのサーバーオプションの詳細な説明
  • Tomcat 起動エラー: java.util.zip.ZipException の解決方法
  • Linux サーバーで Tomcat の BIO、NIO、APR モードを設定する方法
  • Tomcatはセッション共有(セッションレプリケーション)を実装します

<<:  MySQLコンテナ間のレプリケーション構成例の詳細な説明

>>:  JavaScript 関数のコンテキストのルールは何ですか?

推薦する

Centos7 環境でバイナリ インストール パッケージから mysql5.6 をインストールする方法の詳細な説明

この記事では、centos7 環境でバイナリ インストール パッケージを使用して mysql5.6 ...

jQuery キャンバスは QR コード付きのポスターを生成します

この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...

JSは文字列内の指定された文字列のn番目の出現位置を取得します

文字の位置を取得するための同様の方法について学習します。 charAt() 文字列内の指定された位置...

マインスイーパゲームを実装するための jQuery プラグイン (2)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する2番目の記事を参考までに...

ボタンの 4 つのクリック応答方法の概要

ボタンは頻繁に使用されます。ここでは、イベント処理メソッドを整理し、実装方法が多数あることを発見しま...

自動的にフォーカスを取得する要素入力ボックスの実装

最近のプロジェクトでフォームを作成するときに、コメント ボックスまで自動的にスクロールし、コメント ...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

ボックスモデルのサイズの詳細な説明は、パディング、マージン、境界の値によって異なります。

ボックス モデルは、要素ボックスの幅と高さ、パディング、境界線、余白のサイズを指定します。境界線の内...

フォームを送信した後、別のファイルに移動する

<br />質問:特定のファイルにジャンプするには、HTML でどのように記述すればよい...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...

JavaScriptは組み込みオブジェクトのプロトタイプメソッド実装を追加します

オブジェクトがメソッドを呼び出す順序:インスタンス内にメソッドが存在しない場合は、インスタンス オブ...

Docker共通コマンドの詳しい解説 Study03

目次1. ヘルプコマンド2. ミラーコマンド3. コンテナコマンド1. ヘルプコマンド1. 現在のD...

MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

目次1. 遭遇した問題2. 問題を分析する3. 本当の問題4. 解決策5. ソリューション効果1. ...

CentOS7仮想マシンで固定IPアドレスを設定する方法

私の開発環境は、VMWare 仮想マシンに CentOS をインストールし、ホスト ファイルにインタ...

JavaScriptを使用してSMS認証コード間隔を送信する機能を実装する

多くのアプリやウェブサイトでは、ログインやアカウント登録の際にSMS認証コード1を送信する場所があり...