Tomcat のパフォーマンス最適化方法の簡単な概要

Tomcat のパフォーマンス最適化方法の簡単な概要

Tomcat自体の最適化

  • Tomcat メモリ最適化
    • 起動時に大きなメモリ ブロックが必要であることを JVM に伝えます (メモリを調整するのが最も直接的な方法です)
    • Tomcatの起動スクリプトcatalina.shでjava_OPTSパラメータを設定できます。
    • JAVA_OPTSパラメータの説明
      • server jdkのサーバーバージョンを有効にする
      • Xms Java仮想マシンが初期化されるときの最小メモリ
      • Xmx Java仮想マシンで利用可能な最大メモリ
      • XX: PermSize メモリの永続予約領域
      • XX:MaxPermSize メモリ内の最大永続予約領域
    • 設定例:
    • JAVA_OPTS='-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'
    • 注: メモリ構成は、サーバー (または仮想マシン) の実際のメモリに応じて構成する必要があります。
    • 有効にするにはTomcatを再起動してください
  • Tomcat IO最適化
    • 必要に応じて、APR を使用して、オペレーティング システム レベルで非同期 IO の問題を解決できます。次に、NIO を使用します。
    • server.xml内
  • Tomcat スレッドの最適化
    • maxThreads="600" /// スレッドの最大数
    • minSpareThreads="100" ///初期化中に作成されるスレッドの数
    • maxSpareThreads="500" /// 作成されたスレッドの数がこの値を超えると、Tomcat は不要になったソケット スレッドを閉じます。
    • acceptCount="700" //リクエスト処理に使用可能なスレッドがすべて使用されたときに、処理キューに入れることができるリクエストの数を指定します。この数を超えるリクエストは処理されません。
  • スレッドプールの使用
    • server.xml に executor ノードを追加し、コネクタの executor プロパティを構成します。
    • namePrefix: スレッドプール内のスレッドの命名プレフィックス
    • maxThreads: スレッドプール内のスレッドの最大数
    • minSpareThreads: スレッドプール内のアイドルスレッドの最小数
    • maxIdleTime: アイドル スレッドの最小数を超えると、残りのスレッドはこの時間待機してからシャットダウンします。
    • threadPriority: スレッドの優先度
<Executor name="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<コネクタ ポート="8080" プロトコル="HTTP/1.1" 実行者="tomcatThreadPool"/>
  • DNSルックアップを無効にする
    • Web アプリケーションがクライアント情報をログに記録する場合、クライアントの IP アドレスもログに記録するか、ドメイン ネーム サーバーを介してマシン名を IP アドレスに変換します。 DNS クエリにはネットワークの使用が必要であり、多くの遠隔サーバーまたは動作していないサーバーから対応する IP アドレスを取得する必要があるため、一定の時間がかかることがあります。 DNS クエリがパフォーマンスに与える影響を排除するために、server.xml ファイルの enableLookups パラメータ値を変更して DNS クエリをオフにすることができます。
  • キャッシュの最適化
    • 静的ページを毎回ディスクから読み取らなくても済むように、静的ページをキャッシュするのが最適です。ここでは、画像、CSS、および js ファイルをキャッシュするためのキャッシュ サーバーとして Nginx を使用し、バックエンドの Tomcat へのアクセスを効果的に削減します。
  • Tomcat で GZIP 圧縮を有効にして Web パフォーマンスを向上させる
    • %TOMCAT_HOME%/conf/server.xml を変更し、ノードを次のように修正します。
    • GZIP の欠点。 GZIP を使用しないプロジェクトと比較すると、GZIP を使用すると、サーバーの圧縮 (CPU 消費) とクライアントの解凍の負荷が増加するため、サーバーの構成要件が高くなります。また、圧縮には時間がかかります。より少ないスペースを占有して高い圧縮率を得たい場合は、より長い時間を犠牲にする必要があります。逆に、時間の方が貴重でスピードが求められる場合は、圧縮率を小さくする必要があり、当然より多くのスペースを占有します (圧縮率 = 元のコンテンツのサイズ/圧縮サイズ、圧縮率が大きいほど、圧縮後の圧縮パッケージが占めるサイズは小さくなります)。これが物理的なスペースと時間の矛盾です。
  • nginxを使用してクラスターを作成する
    • JVM仮想マシンのチューニング
    • オペレーティングシステムのチューニング
    • オペレーティングシステムの最適化としては、利用可能なメモリ容量を可能な限り増やし、CPU 周波数を向上させ、ファイルシステムの読み取りおよび書き込み速度を確保することなどが挙げられます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Tomcat のパフォーマンス最適化のための Apr モジュールの構築方法
  • Tomcatのセキュリティ構成とパフォーマンスの最適化の詳細な説明
  • Tomcat パフォーマンスの最適化 (パフォーマンスの概要)
  • Nginx+Tomcat で高性能な負荷分散クラスターを構築する方法
  • JVM Tomcat パフォーマンス プラクティス (推奨)

<<:  Linux の MySQL でリモート接続を承認する方法

>>:  Javascript における非同期待機の詳細な理解

推薦する

MySQL binlog を使用して誤って削除されたデータベースを復元する方法

目次1 現在のデータベースの内容を表示し、データベースをバックアップする2 bin_log関数を有効...

CentOS7環境にMySQL5.5データベースをインストールする

目次1. 現在のシステムにMySQLがインストールされているかどうかを確認する2. インストールされ...

MySql 学習ノートにおけるトランザクション分離レベルの詳細な説明

背景トランザクションについて話すとき、誰もがそれに精通している必要があります。MySQL データベー...

クールなページング効果を実現するネイティブJS

この記事では、次のような効果を持つ JS ページング効果の例を紹介します。クールだと思いませんか? ...

アコーディオンセカンダリメニューを実装するためのjQueryプラグイン

この記事では、jQueryプラグインを使用してアコーディオンセカンダリメニューを作成します。具体的な...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

JavaScript でオブジェクトのプロパティを削除する方法

1. 削除delete は、オブジェクトのプロパティを残さずに削除する唯一の方法ですが、その「代替」...

js での Object.create インスタンスの使用法の詳細な説明

1. Object.create() メソッドを使用して新しいオブジェクトを作成し、既存のオブジェク...

HTML で選択ドロップダウン ボックスのコンテンツが不完全に表示され、部分的にカバーされる問題の解決策

今日、問題が発生しました。クエリ バーのドロップダウン ボックスの内容が長すぎて、一部が隠れてしまっ...

画面なしで無線ネットワークに接続しているときに Raspberry Pi の IP アドレスを見つける方法

あなたがlinuxerだと仮定すると、 windowserだとは想定しません。Windows ユーザ...

Eclipse/Tomcat でホットデプロイメントとホットスタートを実装する方法

1. ホット デプロイメント: コンテナの実行中にプロジェクト全体を再デプロイすることを意味します。...

Vue+SpringBoot+Shiroのクロスドメイン問題を解決する

目次1. Vueフロントエンドを構成する1. クロスドメイン構成を開発する2. 本番環境のクロスドメ...

mysql8.0.12 でルートパスワードをリセットする方法

データベースをインストールした後、誤ってインストール ウィンドウを閉じたり、長期間 root ユーザ...

Docker 実行時にユーザーとグループを管理する方法

Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティン...