Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tomcatコミッタがお送りするちょっとマニアックなTomcatのコンフィグレーション10選
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kfujino
May 27, 2021
Technology
1
4.9k
Tomcatコミッタがお送りするちょっとマニアックなTomcatのコンフィグレーション10選
kfujino
May 27, 2021
Tweet
Share
Other Decks in Technology
See All in Technology
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.6k
AIが実装する時代、人間は仕様と検証を設計する
gotalab555
1
560
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
570
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
Context Engineeringの取り組み
nutslove
0
380
Agent Skils
dip_tech
PRO
0
140
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.6k
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
210
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.7k
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
190
Featured
See All Featured
Chasing Engaging Ingredients in Design
codingconduct
0
120
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
150
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Faster Mobile Websites
deanohume
310
31k
Documentation Writing (for coders)
carmenintech
77
5.3k
Accessibility Awareness
sabderemane
0
57
Test your architecture with Archunit
thirion
1
2.2k
Ethics towards AI in product and experience design
skipperchong
2
200
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
58
50k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
350
Transcript
Tomcatコミッタがお送りするちょ っとマニアックなTomcatのコンフ ィグレーション10選 藤野圭一 Confidential Copyright ©︎ 2021 by Future
Corporation
Agenda • 自己紹介 • ちょっとマニアックなTomcatのコンフィグレーション10選 • Tomcat10以降のバージョン体系の話 Confidential Copyright ©︎
2021 by Future Corporation
Topic • About Me Confidential Copyright ©︎ 2021 by Future
Corporation 自己紹介
誰? • 藤野圭一 • 2019/10 Future入社 ◦ 独立系SI企業から転職。2社目 • 趣味
◦ 生き物飼育(クワガタ、カブトムシ、アクアリウム) ◦ OSS活動 Confidential Copyright ©︎ 2021 by Future Corporation
OSS活動 • ロール ◦ Tomcat コミッタ ◦ Tomcat PMCメンバ ◦
Incubator コミッタ ◦ Incubator PMCメンバ ◦ ASF メンバ • その他 ◦ 本も出しています ◦ 国内外カンファレンス多数登壇 Confidential Copyright ©︎ 2021 by Future Corporation
Topic • 知っているとちょっと得する?マ ニアックな設定 Confidential Copyright ©︎ 2021 by Future
Corporation Tomcatコンフィグレーション10選
設定値を外部リソースから読み込む • Tomcatの設定ファイルの設定項目は通常直接値を設定する • 直接値を設定するのではなく、${Key}指定で別ソースから経 由することも可能 Confidential Copyright ©︎ 2021
by Future Corporation
設定値を外部リソースから読み込む • デフォルトではJavaのシステムプロパティ経由で利用可能 ◦ Javaオプション ◦ setenv.sh ◦ catalina.properties等 Confidential
Copyright ©︎ 2021 by Future Corporation
設定値を外部リソースから読み込む • さらに、org.apache.tomcat.util.digester. PROPERTY_SOURCE=org.apache.tomcat.util.digester. EnvironmentPropertySourceをJavaオプションに指定す るとプロセスの環境変数から取得することが可能 Confidential Copyright ©︎ 2021
by Future Corporation
ポートオフセット • 同一筐体で複数台のTomcatを立ち上げる際の良くやるやり 方としてserver.xmlのport番号の設定だけ変更してTomcat を起動する。(バインド例外を避ける為) • でも、複数あるport番号をちまちま変更するのは面倒 • そんなときはポートオフセットを利用 •
offset分ずらした値でportを設定する。 • 例えば、 Confidential Copyright ©︎ 2021 by Future Corporation
ポートオフセット • ログにもベースportとoffsetが出力される Confidential Copyright ©︎ 2021 by Future Corporation
Json Error Report • Tomcatのエラーページ ◦ デフォルト設定ではHTMLページをTomcatが組み立てて返却 ◦ TomcatをAPIServerとして動作させる場合、HTMLが返却されると 嬉しくないことがある。JSONでレシポンスを返して欲しい。
◦ そんなときは、エラーをHTMLページではなく、JSONデータで返 すerrorReportValveを利用する Confidential Copyright ©︎ 2021 by Future Corporation
Json Error Report • デフォルトのエラーページ Confidential Copyright ©︎ 2021 by
Future Corporation
Json Error Report • JSONレスポンス Confidential Copyright ©︎ 2021 by
Future Corporation
StuckThreadDetectionValve • Tomcatを利用しているシステムのどこかわからんが処理が スタックしたり、レスポンスが遅延して返ってこないケー ス • Javaだとスレッドダンプを取得してアナライザで解析 • 発生時に即座にとれれば良いが。。 •
依頼するにも再現させてなど、タイムリーにできない Confidential Copyright ©︎ 2021 by Future Corporation
StuckThreadDetectionValve • そんなときは、StuckThreadDetectionValveを利用 • StuckThreadDetectionValveはバックグラウンドでリクエス ト処理スレッドを常に監視し、閾値を超えたリクエスト処 理スレッドのスタックトレースを出力してくれる Confidential Copyright ©︎
2021 by Future Corporation 閾値
StuckThreadDetectionValve • スレッドスタック検知時にログが出力される Confidential Copyright ©︎ 2021 by Future Corporation
パスも出る
StuckThreadDetectionValve • スタックしていたスレッドが戻ってきた際もログに Confidential Copyright ©︎ 2021 by Future Corporation
• 但しスレッドダンプのようなロック情報等は見れないの で、ロック状態の解析を行う場合は、スレッドダンプが必 要 処理時間も
Legacyアプリケーションベース • javaEE→jakartaEEへのネームスペース変更のビックバンの 影響(後述)で、javaEEを含むアプリケーションは Tomcat10では動かない。つまり、今Tomcat9等にデプロイ しているアプリケーションはTomcat10では動かない。 • 恒久対応としては、jakartaEEに対応したアプリにアップデ ートすること •
暫定対応として、Host#legacyAppBaseをアプリケーシ ョンディレクトリとして利用することが可能 Confidential Copyright ©︎ 2021 by Future Corporation
Legacyアプリケーションベース • Host#legacyAppBase指定したディレクトリ(デフォル ト:webapps-javaee)にアプリケーションを配置すると マイグレーションツールが起動して、バイナリをjakartaEE 対応に変更してデプロイしてくれる ※他のEEコンテナは知らない。最初いろいろ議論していたが 各コミュニティでその先どうなったかは不明 Confidential Copyright
©︎ 2021 by Future Corporation
Legacyアプリケーションベース • ※bin/配下にmigrate.shもあるのでこのシェルを直実行する ことでもマイグレーション可能 Confidential Copyright ©︎ 2021 by Future
Corporation アプリをマイグレーションして、 webappsディレクトリにコピー
Legacyアプリケーションベース • JavaEE→Jakartaのマイグレーションを実施した場合はロ グに出力 Confidential Copyright ©︎ 2021 by Future
Corporation
静的クラスタメンバーシップ • Tomcatでクラスタ構成を組む場合、デフォルトのクラスタ リングのメンバシップはマルチキャストを利用する • Cloud環境等マルチキャストが使えないケースのクラスタメ ンバシップの組み方を二つ紹介 Confidential Copyright ©︎
2021 by Future Corporation Tomcat1 Tomcat2 Tomcat3 マルチキャストAddr Group
静的クラスタメンバーシップ • Staticメンバシップ ◦ マルチキャストは動的にマルチキャストアドレスにジョ インしてきたノードを登録するが、staticメンバシップ はあらかじめクラスタメンバを定義する ◦ 定義したクラスタメンバでクラスタを構成する ◦
定義した全てを起動しておく必要はなく、必要数分定義 しておけば良い Confidential Copyright ©︎ 2021 by Future Corporation
静的クラスタメンバーシップ • Staticメンバシップ Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat1 Static(Unicast Addr)Group メンバ定義 • Tomcat1 • Tomcat2 • Tomcat3 Tomcat2 メンバ定義 • Tomcat1 • Tomcat2 • Tomcat3 Tomcat3 メンバ定義 • Tomcat1 • Tomcat2 • Tomcat3
静的クラスタメンバーシップ Confidential Copyright ©︎ 2021 by Future Corporation
静的クラスタリングメンバーシップ • 注意 ◦ 当初から方針が大分変っているのでググって出る情報は古 いものが多いので注意 ◦ 詳解Tomcatでも古い方法で書かれている ◦ StaticMembershipInterceptorでも出来るが非推奨、
LocalMember設定不要等 ◦ IPをキャッシュしてしまうので、今度修正しておきます! Confidential Copyright ©︎ 2021 by Future Corporation
Cloudクラスタメンバーシップ • Cloudメンバシップ ◦ kubernetes用のクラスタメンバシップ ◦ DNSPingとKubePingの2実装(※後者を説明) ◦ 別途kubernetesの環境が必要 ◦
PodにCloudメンバシップを設定したTomcatインスタンスをデプロイ ◦ KubePingを利用してダイナミックにクラスタメンバシップを構築す る Confidential Copyright ©︎ 2021 by Future Corporation
Cloudクラスタメンバーシップ • Cloudメンバシップ Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat1 Kubernetes(Openshift) クラスタ Pod Tomcat1 Pod Tomcat1 Pod Master KubePing KubePing Pod情報 Pod情報
Cloudクラスタメンバーシップ • コンテナオーケストレーションツールなどのヘルスチェッ ク用にHealthCheckValveも追加で設定要 • KUBERNETES_NAMESPACE、認証情報等の環境変数を Dockerfile等で指定する Confidential Copyright ©︎
2021 by Future Corporation
Cloudクラスタメンバーシップ • 注意 ◦ 作成したのが2年以上前なので最新のkubernetesでどう なるか未確認 ◦ 公式ドキュメントに設定方法が未 Confidential Copyright
©︎ 2021 by Future Corporation
組込みTomcatのコンフィグソース • SpringBoot等に組込まれているTomcat • SpringBoot専用機ではないので、だれでもnew Tomcat()で Tomcatインスタンスを作成できる。起動もできる。 • とはいっても、new Tomcat()した後、どうやってTomcatを
コンフィグするのかわからない • 簡単なWebサーバならさっくっと出来るが、少し凝った設 定をしているserver.xmlで構成されたTomcatを組込みで再 現するのはなかなか大変 • そんな時のコンフィグを二つ紹介 Confidential Copyright ©︎ 2021 by Future Corporation
組込みTomcatのコンフィグソース • ConfigurationSourceを利用し、Tomcatを初期化 • CatalinaBaseConfigurationSourceを利用すればserver.xml をパースして構成された組込みTomcatを作成してくれる Confidential Copyright ©︎ 2021
by Future Corporation
ソースコード生成 • 起動オプションgenerateCodeを追加して、 Tomcatを起動 すると組込みTomcatのソースコードが出力されます。 Confidential Copyright ©︎ 2021 by
Future Corporation
ソースコード生成 Confidential Copyright ©︎ 2021 by Future Corporation
多言語化対応 • Tomcatのログ等はその環境に合わせた言語で出力されます • ただ、あらゆる言語を操るコミッタはいないので、コミュ ニティ全員で協力して多言語化を進めています • そのツールとして、コミュニティではPOEditorを利用して います •
https://cwiki.apache.org/confluence/display/TOMCAT/M anaging+translations Confidential Copyright ©︎ 2021 by Future Corporation
多言語化対応 • こんな感じ Confidential Copyright ©︎ 2021 by Future Corporation
多言語化対応 • Tomcat translations projectにジョインして言語を選択する ことで手軽に翻訳が可能 • ソースをハッキングしなくてもコミュニティ貢献が気軽に 出来ます •
なのでTomcatのログの日本語がおかしかったらPOEditor経 由で直して頂ければ、リリース時に反映されます • 8割くらい私が勢いでやっているのでいろいろ問題あると思 いますので気軽に修正してください Confidential Copyright ©︎ 2021 by Future Corporation
Topic • わかり難い。。 • 今後少し変わるかもしれない が今はコレ。。 Confidential Copyright ©︎ 2021
by Future Corporation Tomcat10以降のバージョン体系
Tomcat10以降のバージョン体系 • はじめに。知っておくこと1 ◦ TomcatはJavaEEのサブセットをsupport ▪ Tomcat7.0.x : support Java
EE 6 ▪ Tomcat8.5.x : support Java EE 7 ▪ Tomcat9.0.x : support Java EE 8 Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • はじめに。知っておくこと2 ◦ JavaEEがEclipse Foundationに ▪ JavaEE8 → JakartaEE8
◦ JakartaEE8は名前が変わって、機能に影響の無いちょ っとした修正のみ ◦ 要は完全互換 Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • JakartaEE8→JakartaEE9へのバージョンアップ ◦ 仕様の追加云々はないが、めんどくさい ◦ javax.* -> jakarta.* のネームスペースの変更
◦ 簡単にいうと、JavaEE8(JakartaEE8)のアプリケーションは JakartaEE9と互換性はない ◦ つまり動かない。Java的に言うとClassNotFoundException Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • Tomcat10について ◦ Tomcat10.0.xはJakartaEE9をサポートする ◦ Tomcat9以前で稼働しているアプリケーションは Tomcat10では(マイグレーションしないと)動作しな い ◦
まぁいつかはマイグレーションはしないといけないので 可能ならやりましょう。 Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • Tomcat10を含めたサポート状況 ◦ Tomcat7.0.x : support Java EE 6
◦ Tomcat8.5.x : support Java EE 7 ◦ Tomcat9.0.x : support Java EE 8(JakartaEE8) ◦ Tomcat10.0.x : support JakartaEE9 • これが今現在の状態。まぁまだ分かる Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • では、JakartaEE10がリリースされるとどうなるか? ◦ Tomcat8.5.x : support Java EE 7
◦ Tomcat9.0.x : support Java EE 8 ◦ Tomcat9.10.x : support Java EE 8 with Tomcat10 API ◦ Tomcat10.0.x : EOL ◦ Tomcat10.1.x : support JakartaEE10 Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • では、JakartaEE11がリリースされるとどうなるか? ◦ Tomcat8.5.x : support Java EE 7
→多分EOL ◦ Tomcat9.0.x : support Java EE 8 ◦ Tomcat9.10.x : EOL ◦ Tomcat9.11.x : support Java EE 8 with Tomcat11 API ◦ Tomcat10.1.x : support JakartaEE10 ◦ Tomcat11.0.x : support JakartaEE11 Confidential Copyright ©︎ 2021 by Future Corporation
Tomcat10以降のバージョン体系 • 複雑ですが、自分のアプリケーションをどのTomcatで実行す るのか適切に判断しましょう。 Confidential Copyright ©︎ 2021 by Future
Corporation
Thank you for listening. Copyright ©︎ 2021 by Future Corporation
Confidential