Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Tomcatコミッタがお送りするちょっとマニアックなTomcatのコンフィグレーション10選
Search
kfujino
May 27, 2021
Technology
5.1k
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
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
160
データ_AIの事業の勝敗をわけるもの
nek0128
0
390
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.6k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
25
16k
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
8
3.5k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.7k
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
2
540
CLIライブラリ開発を支える技術
htnabe
0
120
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
150
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
0
2.2k
Minecraft JavaのMODをSwiftで作る
1mash0
0
170
人間はどの意思決定を手放せるのか
kawasima
14
7k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.9k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
280
Into the Great Unknown - MozCon
thekraken
41
2.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
450
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Crafting Experiences
bethany
1
340
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
540
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
Become a Pro
speakerdeck
PRO
31
6.3k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
940
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