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
kfujino
May 27, 2021
Technology
5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Tomcatコミッタがお送りするちょっとマニアックなTomcatのコンフィグレーション10選
kfujino
May 27, 2021
Other Decks in Technology
See All in Technology
Claude Codeをどのように キャッチアップしているか
oikon48
11
5.7k
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
1.1k
FinOps × AIエージェントで実現する コストインシデントの自動調査
oasis1994liveforever
0
130
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
210
Chainlitで作るお手軽チャットUI
ynt0485
0
200
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
130
連合学習と機密コンピューティング
lycorptech_jp
PRO
0
100
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
680
脆弱性対応、どこで線を引くか
rymiyamoto
1
370
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
Dario Amodi『Policy on the AI Exponential』を理解する
nagatsu
0
220
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
Balancing Empowerment & Direction
lara
6
1.2k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
The Pragmatic Product Professional
lauravandoore
37
7.3k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
770
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
580
It's Worth the Effort
3n
188
29k
Exploring anti-patterns in Rails
aemeredith
3
400
The Cult of Friendly URLs
andyhume
79
6.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
RailsConf 2023
tenderlove
30
1.5k
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