1. はじめに まず、1 台のマシンで複数のインスタンスを使用する理由という質問に答える必要があります。 2. システム環境 システム: 16.04.5 LTS 3. 環境構築 3.1、Tomcatをダウンロード jdk をインストールします: apt-get で openjdk-8-jdk をインストールします 公式サイトにアクセスしてください: https://tomcat.apache.org/download-90.cgi コアを見つけて、tar.gz をクリックし、ダウンロード リンクがポップアップ表示されたらダウンロード アドレスをコピーします。 http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz を取得します。 tomcatを解凍します: tar -xzvf apache-tomcat-9.0.13.tar.gz プログラム ディレクトリを作成します。 ##プログラムディレクトリを作成する mkdir /data ##解凍したファイルをデータディレクトリに移動します mv ./apache-tomcat-9.0.13 /data/ cp /etc/profile /etc/profile.bak echo "CATALINA_HOME=/data/apache-tomcat-9.0.13" をエクスポート >> /etc/profile echo "export PATH=\$PATH:\$CATALINA_HOME/bin">> /etc/profile && source /etc/profile ##sh ファイルを作成します touch tomcat-start.sh tomcat-stop.sh ##権限を変更する chmod 760 /data/tomcat-start.sh /data/tomcat-stop.sh プロファイルをバックアップし、Tomcat の CATALINA_HOME を環境変数に書き込み、環境変数を有効にします。 作成するtomcat-start.sh の内容は次のとおりです。 #!/bin/bash ##CATALINA_BASE は、現在のスクリプトの親ディレクトリです。CATALINA_BASE のサブディレクトリにない場合は、export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) を変更することを忘れないでください。 $CATALINA_BASE をエコーする TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` if [ -n "$TOMCAT_ID" ] ; then echo "tomcat($TOMCAT_ID) はまだ実行中です。まずシャットダウンしてください"; 出口2; フィ TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh` [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" 「CATALINA_BASE: $CATALINA_BASE」をエコーします echo "Tomcat スレッド: $TOMCAT_ID" echo "開始成功!!!" それ以外 echo "$0 $CATALINA_BASE の起動に失敗しました" $TOMCAT_START_LOG をエコーします フィ 作成するtomcat-stop.sh の内容は次のとおりです。 #!/bin/bash ##CATALINA_BASE は、現在のスクリプトの親ディレクトリです。CATALINA_BASE のサブディレクトリにない場合は、export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) を変更することを忘れないでください。 $CATALINA_BASE をエコーします TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'` if [ -n "$TOMCAT_ID" ] ; then TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh` それ以外 echo "Tomcat インスタンスが見つかりません: $CATALINA_BASE" 出口 フィ [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" 「CATALINA_BASE: $CATALINA_BASE」をエコーします echo "停止成功!!!" それ以外 echo "$0 $CATALINA_BASE の停止に失敗しました" $TOMCAT_STOP_LOG をエコーします フィ 2 つの Tomcat をコピーします。 ##lib および bin フォルダの内容を完全に削除し、空の bin フォルダを生成します cp -r apache-tomcat-9.0.13 /data/apache-tomcat-test1 && cd /data/apache-tomcat-test1 && rm -rf lib/ bin/ && mkdir bin && cd - ## 起動スクリプトと停止スクリプトを bin フォルダにコピーし、権限をつけてコピーします cp -p tomcat-start.sh tomcat-stop.sh /data/apache-tomcat-test1/bin/ ##同じ tomcat ディレクトリを権限付きでコピーします cp -Rp /data/apache-tomcat-test1/ /data/apache-tomcat-test2/ server.xml ポートを構成する ご存知のとおり、同じサーバーにデプロイされた異なる Tomcat には異なるポートを設定する必要があります。そうしないとポートの競合が発生するため、conf/server.xml の最初の 3 つのポートのみを変更する必要があります。しかし、次の 4 つがあります。
コメントなしバージョン: <?xml バージョン="1.0" エンコーディング="UTF-8"?> <サーバーポート="8005" シャットダウン="シャットダウン"> <リスナークラス名="org.apache.catalina.startup.VersionLoggerListener" /> <リスナークラス名="org.apache.catalina.core.AprLifecycleListener" SSLEngine="オン" /> <リスナークラス名="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <リスナークラス名="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <リスナークラス名="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <グローバル命名リソース> <リソース名="UserDatabase" auth="コンテナ" タイプ="org.apache.catalina.UserDatabase" description="更新および保存できるユーザーデータベース" ファクトリー="org.apache.catalina.users.MemoryUserDatabaseFactory" パス名="conf/tomcat-users.xml" /> </グローバル命名リソース> <サービス名="Catalina"> <コネクタ ポート="8080" プロトコル="HTTP/1.1" 接続タイムアウト = "20000" リダイレクトポート="8443" /> <コネクタ ポート="8009" プロトコル="AJP/1.3" リダイレクト ポート="8443" /> <エンジン名="Catalina" defaultHost="localhost"> <レルムクラス名="org.apache.catalina.realm.LockOutRealm"> <レルムクラス名="org.apache.catalina.realm.UserDatabaseRealm" リソース名="ユーザーデータベース"/> </レルム> <ホスト名="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve クラス名="org.apache.catalina.valves.AccessLogValve" ディレクトリ="logs" プレフィックス="localhost_access_log" サフィックス=".txt" パターン="%h %l %u %t "%r" %s %b" /> </ホスト> </エンジン> </サービス> </サーバー> tomcat-test1 は次のように変更されます:
tomcat-test2 は次のように変更されます:
ロゴを変更します: echo "test1"> /data/apache-tomcat-test1/webapps/ROOT/index.jsp echo "test2"> /data/apache-tomcat-test2/webapps/ROOT/index.jsp 変更が完了したら、Tomcat を起動します。 Apache Tomcat テスト 1 の bin/Tomcat 開始.sh Apache Tomcat テスト 2 の bin/Tomcat 開始.sh カール処理はまだ完了していないため、比較的遅くなります。起動したら大丈夫です。 カール 127.0.0.1:9010 カール 127.0.0.1:9020 ここでのアクセスポートは 4. 追記 実は、設定は難しくありません。参考記事のアイデアによると、Tomcat の lib と bin を共有することです。このようにすると、アップグレード時に lib を交換するだけで済み、bin は CATALINA_HOME の同じスクリプトを使用します。実際、CATALINA_HOME の下の bin の下の起動スクリプトとシャットダウン スクリプトは、一様に catalina.sh を呼び出し、単一マシンのマルチインスタンス システムは 5. 質問 5.1. Tomcat の起動が遅い セッション ID の生成に 1 分 6 秒かかり、長すぎるため、アプリケーションの展開にかかる全体的な時間が大幅に増加していることがわかります。この問題は、アプリケーションの起動時に jvm パラメータ #!/bin/bash ##CATALINA_BASE は、現在のスクリプトの親ディレクトリです。CATALINA_BASE のサブディレクトリにない場合は、export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) を変更することを忘れないでください。 $CATALINA_BASE をエコーする TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` エクスポート JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"; if [ -n "$TOMCAT_ID" ] ; then echo "tomcat($TOMCAT_ID) はまだ実行中です。まずシャットダウンしてください"; 出口2; フィ TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh` [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" 「CATALINA_BASE: $CATALINA_BASE」をエコーします echo "Tomcat スレッド: $TOMCAT_ID" echo "開始成功!!!" それ以外 echo "$0 $CATALINA_BASE の起動に失敗しました" $TOMCAT_START_LOG をエコーします フィ 5.2. リモートsshを使用する場合、環境変数は有効になりません 現在の環境変数を更新するには、source コマンドを使用します。 具体的な変更点は以下のとおりです。 #!/bin/bash ##CATALINA_BASEは現在のスクリプトの親ディレクトリです。CATALINA_BASEのサブディレクトリにない場合は、ソースの/etc/profileを変更することを忘れないでください。 エクスポート CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) エクスポート JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"; TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` エコー "----------------------------------" echo "CATALINA_BASE:$CATALINA_BASE を使用しています" echo "CATALINA_HOME:$CATALINA_HOME を使用しています" エコー "----------------------------------" if [ -n "$TOMCAT_ID" ] ; then echo "tomcat($TOMCAT_ID) はまだ実行中です。まずシャットダウンしてください"; 出口2; フィ TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh` [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" echo "Tomcat スレッド: $TOMCAT_ID" echo "開始成功!!!" それ以外 echo "$0 $CATALINA_BASE の起動に失敗しました" 「CATALINA_BASE: $CATALINA_BASE」をエコーします $TOMCAT_START_LOG をエコーします フィ
#!/bin/bash ## CATALINA_BASEは現在のスクリプトの親ディレクトリです。CATALINA_BASEのサブディレクトリにない場合は、ソースの/etc/profileを変更することを忘れないでください。 エクスポート CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'` エコー "----------------------------------" echo "CATALINA_BASE:$CATALINA_BASE を使用しています" echo "CATALINA_HOME:$CATALINA_HOME を使用しています" エコー "----------------------------------" if [ -n "$TOMCAT_ID" ] ; then TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh` それ以外 echo "Tomcat インスタンスが見つかりません: $CATALINA_BASE" 出口 フィ [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" echo "停止成功!!!" それ以外 echo "$0 $CATALINA_BASE の停止に失敗しました" 「CATALINA_BASE: $CATALINA_BASE」をエコーします $TOMCAT_STOP_LOG をエコーします フィ 再起動スクリプトを添付します: #!/bin/bash ソース /etc/profile エクスポート CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) GREEN_COLOR='\E[1;32m' # 緑 RES='\E[0m' TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` スリープ時間=1 エコー "----------------------------------" echo "CATALINA_BASE:$CATALINA_BASE を使用しています" echo "CATALINA_HOME:$CATALINA_HOME を使用しています" エコー "----------------------------------" if [ -n "$TOMCAT_ID" ] ; then echo -e "${GREEN_COLOR}pid $TOMCAT_ID で tomcat インスタンスが見つかりました。今すぐシャットダウンしてください!${RES}"; echo -e "${GREEN_COLOR}---------------start shut down-------------------${RES}" ソース $(dirname $0)/tomcat-stop.sh; echo -e "${GREEN_COLOR}--------------- シャットダウン終了 -------------------${RES}" フィ [ -n "$TOMCAT_ID" ] の間 する スリープ $SLEEP_TIME echo wait "$SLEEP_TIME" s TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` 終わり echo -e "${GREEN_COLOR}---------------スタートアップを開始-------------------${RES}" ソース $(dirname $0)/tomcat-start.sh echo -e "${GREEN_COLOR}---------------スタートアップ終了-------------------${RES}" 参考ブログ: Tomcatの単一マシン複数インスタンスについてお話しましょう Spring Boot アプリケーションの初回起動が遅い 単一マシン上での Tomcat の複数インスタンスの実装に関するこの記事はこれで終わりです。単一マシン上での Tomcat の複数インスタンスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 画像のフェードインとフェードアウト効果を実現する js
>>: MySQL が大規模トランザクションを避けるべき理由とその解決方法
前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...
Jellyka Beesアンティーク手書き [ank]* ジェリーカ・カティカップケーキ LHF ジ...
springboot には tomcat サーバーが組み込まれているため、jar パッケージにパッケ...
マウスイベントマウスが特定の操作を実行すると、イベント オブジェクトが生成され、イベントがトリガーさ...
通常、vue プロジェクトではルーティングを使用します。vue-router は vue.js の公...
さまざまな色の16進コード表[パート1] 赤とピンク、およびそれらの 16 進コード。 #99003...
この記事は共有および集約することを歓迎します。全文を転載する必要はありません。著作権を尊重してくださ...
効果効果は以下のとおりです実装のアイデアbox-shadow プロパティを使用して、複数の灰色の円...
まずはレンダリングを見てみましょう: XML/HTML コードコンテンツをクリップボードにコピー&l...
目次日時タイムスタンプ選び方ミリ秒の時間を保存する方法結論MySQL は、日付と時刻を処理するために...
Git 入門Git は、Linux(R) カーネル開発の管理を支援するために 2005 年に Lin...
insert into employee values(null,'張三','...
この記事では主に、フォント読み込みの最適化に関する一般的な戦略を紹介します。内容の大部分は参考資料と...
序文私は多くのブログを読み、弊社の DBA を含む多くの人々が、MySql では列に null が含...
目次推測する事例:理解を深める参照する後で忘れないように、キーワード infer をメモしておきます...