再配置するときにTomcatが.war
ファイルを再ロードできることは分かっています。Tomcatプロセスを終了して再起動する必要はありません。私は.war
を削除し、Tomcatがアンデプロイするのを待って、新しい.war
をウェブパスにコピーします。しかし、Tomcatを再起動しなくても、何度も些細なアップデートをした後、Tomcatがメモリを効果的にリリースしたり、パフォーマンス上の問題を引き起こしたりする可能性はありますか? 1つのTomcatインスタンスに1つのwarアプリケーションしかないとします。戦争を再展開するときにTomcatを再起動する必要はありますか?
答えて
基本的な問題は、operating system does with processesと同じ方法で、Javaが現在、Java Virtual Machine (JVM)で実行されているコード部分間で何らかの分離を提供していないことです。 Windows/Linux /などの環境下で別のプロセスに影響を与えずにプロセスを強制終了することができます。物事がガベージコレクションされることを保証するだけです。
WARの処理方法は、various specificationsによると、各戦争にはそのコードの実行を担当する独自のクラスローダーが必要です。 WARがデプロイされていない場合、最終的な結果は、そのクラスローダーがガベージコレクションされるべきことです。
残念なことに、garbage collectorは完全に参照されていないオブジェクトのみを処理でき、これを禁止することができるWARコードに存在する微妙なバグが多数存在し、再配置するたびに別のクラスローダーが作成され、あなたはメモリリークを持っています。 Tomcat自体の中でこのような種類のバグを検出して取り組むために多くの努力が払われましたが、JVMサポートなしで100%の権利を行うことは不可能に近づいています。
WARを修正する以外に唯一の措置は、JVMを再起動することです。
生産中でもメモリ使用量をVisualVMで確認すると、Tomcat JVMで何が起こるかを確認できます。
はい。 Tomcatを停止して新しい戦争を展開し、Tomcatを再起動するのはずっときれいです。 1つの欠点は、デフォルトでアプリケーションクラスの多くが新しい要求がアプリケーションにヒットするまでロードされず、大きな問題ではないことです。あなたの新しいWARへの最初のリクエストでスタートアップの数秒を意味します。これが我々が生産に戦争を展開する方法です。
新しい戦争によってTomcatが正常に起動できなくなった場合、我々は戦争をロールバックして問題を知っているが別のトピックである場合に、ログのヘルスチェックを設定することもできます。
ダウンタイムについて
これはあなたの質問の範囲外かもしれませんが、ユーザーがダウンタイムを見られないようにするには、tomcatの複数のインスタンスを実行し、一度に1つずつ展開して再起動します。
- 1. 各展開でSphinxを再起動する必要はありますか?
- 2. Tomcat 7で戦争を展開するときの無限ループ
- 3. TomcatにWARがあり、それが展開されたときにTomcatを再起動するとWARが再展開されますか?
- 4. 複数の戦争(wildfly)を持つEARのフライ戦争に再展開
- 5. jenkinsに展開後にTomcatを再起動するように指示する方法はありますか?
- 6. 戦争が展開され、戦闘のコンテキストが必要です
- 7. Tomcat + intelliJに展開戦争を展開する:java.lang.NoClassDefFoundError:com/sun/media/jai/codec/ImageDecodeParam
- 8. なぜエンヴェイエは展開時にPHP FPMを再起動する必要がありますか?
- 9. ジーンズにスプリングブート戦争を展開する
- 10. SockJs Eventbus Bridge:Verticleを再起動すると、ClientHtmlを再起動する必要がありますか?
- 11. ジェンキンを再起動する必要があるときは?
- 12. jspが変更されたときにtomcatを再起動する必要はありません
- 13. ループを再起動する必要があります
- 14. コードを再パブリッシュするときにIISにどのファイルを展開する必要がありますか?
- 15. 再起動時にシミュレータを再起動する必要がある
- 16. EclipseでWebサイトを更新するたびにTomcatを再起動する必要がありますか?
- 17. springバッチjarを展開可能なtomcatの戦争に変換するには
- 18. ビジュアルスタジオプロジェクトを起動する前に展開する必要があります
- 19. Visual Studio 2008がクラッシュし、デバッガを起動するときに再起動する必要があります
- 20. EclipseでApp Engine/Javaプロジェクトを開発する際にサーバーを再起動する必要はありますか?
- 21. Tomcatプラグインを使用するとIntellijは私の戦争をどこに展開しますか?
- 22. Django:デプロイするときにApacheを再起動する必要はありますか?
- 23. アプリ起動時にBrowserModuleをインポートするときにCommonModuleを再エクスポートする必要がありますか?
- 24. AVSpeechSynthesizerを再起動する前に終了する必要があります
- 25. 戦争展開initメソッド
- 26. 戦争ファイルの展開
- 27. アクティビティを再開するときにMediaPlayerを再起動
- 28. コンテナを再構築して再起動する必要があります。ブラウザからリロードできない
- 29. いつRailsでサーバーを再起動する必要がありますか?
- 30. 毎回spring mvcを再起動する必要がありますか?
_developing_ a WARは、WARの_deploying_とは大きく異なります。手動配置ではなく、ホットデプロイが頻繁に行われるWebコンテナを完全に制御する必要があります。つまり、これは比較的まれに起こるはずです。 –