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 における非同期待機の詳細な理解

推薦する

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

HTML テーブルタグチュートリアル (44): テーブルヘッダータグ

<br />ソース コード内で表の構造を明確に区別するために、HTML 言語では、表のヘ...

Vueを使用してタイマー機能を実装する

この記事の例では、タイマー機能を実装するためのVueの具体的なコードを参考までに共有しています。具体...

Linux exa コマンド (ls よりも優れたファイル表示エクスペリエンス)

インストールREADMEに従ってインストールしてくださいドキュメントには、exa は Rust で実...

Vue ベースの円形スクロールリスト機能を実装する

注: 親コンテナーに高さと :data='Array' および overfolw:h...

Python ベースの MySQL レプリケーション ツールの詳細な説明

目次1. はじめに2回目の練習2.1 インストールと設定2.2 コアクラスの紹介2.3 使い方は? ...

Linux で at および cron スケジュールタスクをカスタマイズする方法

Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...

スクロールバーの美化効果を実現するための CSS3 のサンプル コード

具体的なコードは次のとおりです。 /*スクロールバーの幅*/ ::-webkit-スクロールバー{ ...

jsのディープコピーを理解しましょう

目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....

Vue3デスクトップアプリケーションの構築方法

この記事では、Vite を使用して Vue 3 デスクトップ プロジェクトを開発する方法について説明...

生年月日を年齢に変換し、グループ化して人数を数えるMySQLの例

データベースのクエリ `学生`から*を選択 クエリ結果id名前誕生日1張三1970-10-01 2李...

NodeサイトのForever+nginx導入方法例

私は最近、最も安い Tencent クラウド サーバーを購入しました。これは主に、Web テクノロジ...

Vue の DOM の非同期更新の簡単な分析

目次Vue が DOM を非同期更新する原理1 実際の DOM 要素を取得できるのはいつですか? 2...

MySQL 5.7 でブロックポジショニング DDL の問題を解決する

前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...