Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
nekop
9,073 views
ClassLoader Leak Patterns
Technology
◦
Read more
30
Save
Share
Embed
Embed presentation
Download
Downloaded 112 times
1
/ 30
2
/ 30
3
/ 30
4
/ 30
5
/ 30
6
/ 30
7
/ 30
8
/ 30
9
/ 30
10
/ 30
11
/ 30
12
/ 30
13
/ 30
14
/ 30
15
/ 30
16
/ 30
17
/ 30
Most read
18
/ 30
19
/ 30
20
/ 30
Most read
21
/ 30
22
/ 30
23
/ 30
24
/ 30
25
/ 30
26
/ 30
Most read
27
/ 30
28
/ 30
29
/ 30
30
/ 30
More Related Content
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
PPTX
java.lang.OutOfMemoryError #渋谷java
by
Yuji Kubota
PPTX
Metaspace
by
Yasumasa Suenaga
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
by
Takahiro YAMADA
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
by
Chihiro Ito
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
PDF
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
by
Hironobu Isoda
PDF
CPUから見たG1GC
by
Kenji Kazumura
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
java.lang.OutOfMemoryError #渋谷java
by
Yuji Kubota
Metaspace
by
Yasumasa Suenaga
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
by
Takahiro YAMADA
Javaはどのように動くのか~スライドでわかるJVMの仕組み
by
Chihiro Ito
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
by
Hironobu Isoda
CPUから見たG1GC
by
Kenji Kazumura
What's hot
PDF
JVMのGCアルゴリズムとチューニング
by
佑哉 廣岡
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
by
NTT DATA Technology & Innovation
PDF
これからのJDK/JVM 何を選ぶ?どう選ぶ?
by
Takahiro YAMADA
PPTX
Keycloakの実際・翻訳プロジェクト紹介
by
Hiroyuki Wada
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
by
ichirin2501
PDF
Unified JVM Logging
by
Yuji Kubota
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
by
Yasuharu Nakano
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
PDF
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
by
Masahito Zembutsu
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
DockerとPodmanの比較
by
Akihiro Suda
PPTX
ぱぱっと理解するSpring Cloudの基本
by
kazuki kumagai
PDF
クラスローダーについて
by
Suguru ARAKAWA
PDF
CyberAgentのPrivateCloudeを支えるStorage基盤
by
Hiroki Chinen
PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
by
都元ダイスケ Miyamoto
PDF
Docker Compose 徹底解説
by
Masahito Zembutsu
PDF
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
PDF
ブルックスのいう銀の弾丸とは何か?
by
Yoshitaka Kawashima
JVMのGCアルゴリズムとチューニング
by
佑哉 廣岡
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
by
NTT DATA Technology & Innovation
これからのJDK/JVM 何を選ぶ?どう選ぶ?
by
Takahiro YAMADA
Keycloakの実際・翻訳プロジェクト紹介
by
Hiroyuki Wada
なかったらINSERTしたいし、あるならロック取りたいやん?
by
ichirin2501
Unified JVM Logging
by
Yuji Kubota
Java開発の強力な相棒として今すぐ使えるGroovy
by
Yasuharu Nakano
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
by
pospome
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
by
Masahito Zembutsu
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
DockerとPodmanの比較
by
Akihiro Suda
ぱぱっと理解するSpring Cloudの基本
by
kazuki kumagai
クラスローダーについて
by
Suguru ARAKAWA
CyberAgentのPrivateCloudeを支えるStorage基盤
by
Hiroki Chinen
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
by
都元ダイスケ Miyamoto
Docker Compose 徹底解説
by
Masahito Zembutsu
SpringBootTest入門
by
Yahoo!デベロッパーネットワーク
ブルックスのいう銀の弾丸とは何か?
by
Yoshitaka Kawashima
Similar to ClassLoader Leak Patterns
KEY
関ジャバ JavaOne Tokyo 2012報告会
by
Koichi Sakata
PDF
第三回ありえる社内勉強会 「いわががのLombok」
by
yoshiaki iwanaga
PDF
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
by
JPCERT Coordination Center
PDF
Var handles jjug_ccc_spring_2018
by
David Buck
PPT
Java 7
by
Tetsuya Yoshida
PPT
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
by
hiroya
PPTX
Cve 2013-0422
by
abend_cve_9999_0001
PDF
Java/Androidセキュアコーディング
by
Masaki Kubo
KEY
Java 並行処理の基礎update1
by
Kazuhiro Eguchi
PDF
Javaセキュアコーディングセミナー東京第1回 講義
by
JPCERT Coordination Center
PPT
2012年javaメモリリーク
by
torutk
PDF
Apache Struts2 における任意の Java メソッド実行の脆弱性
by
JPCERT Coordination Center
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
by
Yoshiro Tokumasu
PDF
The Why and How of Java8 at LINE Fukuoka
by
Youhei Nitta
PPTX
Serviceability Toolsの裏側
by
Yasumasa Suenaga
PDF
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
by
David Buck
PPT
JVM-Reading-ParalleGC
by
Minoru Nakamura
PPT
Jvm reading-parallel gc
by
Minoru Nakamura
PDF
jjugccc2018 app review postmortem
by
tamtam180
関ジャバ JavaOne Tokyo 2012報告会
by
Koichi Sakata
第三回ありえる社内勉強会 「いわががのLombok」
by
yoshiaki iwanaga
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
by
JPCERT Coordination Center
Var handles jjug_ccc_spring_2018
by
David Buck
Java 7
by
Tetsuya Yoshida
webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法
by
hiroya
Cve 2013-0422
by
abend_cve_9999_0001
Java/Androidセキュアコーディング
by
Masaki Kubo
Java 並行処理の基礎update1
by
Kazuhiro Eguchi
Javaセキュアコーディングセミナー東京第1回 講義
by
JPCERT Coordination Center
2012年javaメモリリーク
by
torutk
Apache Struts2 における任意の Java メソッド実行の脆弱性
by
JPCERT Coordination Center
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
by
Yoshiro Tokumasu
The Why and How of Java8 at LINE Fukuoka
by
Youhei Nitta
Serviceability Toolsの裏側
by
Yasumasa Suenaga
HotSpot のロック: A Peek Under the Hood [JJUG ナイトセミナ JVM 特集 2015年8月]
by
David Buck
JVM-Reading-ParalleGC
by
Minoru Nakamura
Jvm reading-parallel gc
by
Minoru Nakamura
jjugccc2018 app review postmortem
by
tamtam180
More from nekop
PDF
Java Drag Race Tuning
by
nekop
PDF
JBoss AS 7 / EAP 6 modules and class loading
by
nekop
PDF
Module classloading
by
nekop
PDF
JBoss AS7 rev3
by
nekop
PDF
Infinispan - Open Source Data Grid rev2
by
nekop
PDF
JBoss AS7 rev2
by
nekop
PDF
JBoss AS7
by
nekop
PDF
CDI, Seam 3 and Forge
by
nekop
PDF
Infinispan - Open Source Data Grid
by
nekop
PDF
Iteratorパターン
by
nekop
PDF
Proxy
by
nekop
PDF
mod_cluster
by
nekop
Java Drag Race Tuning
by
nekop
JBoss AS 7 / EAP 6 modules and class loading
by
nekop
Module classloading
by
nekop
JBoss AS7 rev3
by
nekop
Infinispan - Open Source Data Grid rev2
by
nekop
JBoss AS7 rev2
by
nekop
JBoss AS7
by
nekop
CDI, Seam 3 and Forge
by
nekop
Infinispan - Open Source Data Grid
by
nekop
Iteratorパターン
by
nekop
Proxy
by
nekop
mod_cluster
by
nekop
ClassLoader Leak Patterns
1.
クラスローダ リークパターン なにそれおいしいの?
Takayoshi Kimura Senior Software Maintenance Engineer, JBoss Global Support Service Red Hat
2.
自己紹介
3.
nekop ● JBoss の中の人 ●
Emacs で Java 書く人 ● オープンソース大好きっ子 ● ネコよりイヌが好き
4.
宣伝
5.
JBoss では エンジニアを
募集して おります!
6.
JBoss で働きませんか ● Java
とオープンソースが好き な人におすすめ ● おやつ無料 ● 飲み物自動販売機無料
7.
JBoss で働きませんか ● 主に「オープンソースで遊ぶ」
のと「技術的な人助け」 ● Linux カーネルから Java アー キテクトまで豊富な同僚
8.
本題
9.
クラスローダ リーク
10.
何が起こる? ● java.lang.OutOfMemoryError:
perm gen space ● クラス定義情報が置いてあるメ モリ領域 (Perm) を消費しっぱ なし
11.
いつリークする? ● クラスローダが破棄、再作成さ
れるタイミング ● 具体例として、アプリケーショ ンサーバに再デプロイを行った とき
12.
なぜリークする? ● そのクラスローダへの参照が
残ってるから ● そのクラスローダからロードさ れたクラスへの参照が残ってる から ● クラスローダをまたがる参照
13.
パターン
その1 ThreadLocal
14.
ThreadLocal ● 同一スレッド上で値の受け渡し
ができて便利 ● フレームワークなどでよく使わ れている
15.
ThreadLocal の参照構造 ● ThreadLocal
に設定した値は Thread から強参照される ● 詳しく知りたい人はソース嫁
16.
ThreadLocal 開放条件 ● ThreadLocal
へ到達可能な強参 照が一つもない場合開放される ● Thread が開放されたら一緒に 開放される
17.
ありがちなリークコード public class ThreadLocalKeyValue
{ private ThreadLocal tl = new ThreadLocal(); public void add(Object key, Object value) { tl.set(new KeyValuePair(key, value)); } public Object getKey() { return ((KeyValuePair)tl.get()).key; } public Object getValue() { return ((KeyValuePair)tl.get()).value; } private class KeyValuePair { public Object key, value; public KeyValuePair(Object key, Object value) { this.key = key; this.value = value; } } }
18.
テスト ThreadLocalKeyValue target =
new ThreadLocalKeyValue(); ReferenceQueue queue = new ReferenceQueue(); PhantomReference ref = new PhantomReference(target, queue); target.add("foo", "bar"); target = null; System.gc(); System.out.println("Released?: " + ref.isEnqueued());
19.
テスト結果 false って何よ
( ゚Д゚)
20.
修正 public class ThreadLocalKeyValue
{ private ThreadLocal tl = new ThreadLocal(); public void add(Object key, Object value) { tl.set(new KeyValuePair(key, value)); } public Object getKey() { return ((KeyValuePair)tl.get()).key; } public Object getValue() { return ((KeyValuePair)tl.get()).value; } private static class KeyValuePair { public Object key, value; public KeyValuePair(Object key, Object value) { this.key = key; this.value = value; } } }
21.
テスト結果 true
22.
ハァ ? ( ゚Д゚)
23.
ThreadLocal まとめ ●
設定した値は Thread から強参照される ● ThreadLocal に渡す「値」の参照関係に注意 ● スレッドのコントロールが自分に無い環境では Thread の開放に伴う ThreadLocal の開放は 期待できない – アプリケーションサーバ上では当然スレッドは プールされている – リークしないのは「入れたら確実に消す ( 一時的な 利用 ) 」か「入れっぱなしでも値の参照関係が安 全だと保証できる」場合のみ
24.
ThreadLocal と Tomcat ●
Tomcat はアンデプロイ時に ThreadLocal を リフレクションで開放してくれる機能がある – アプリケーションやフレームワーク、ライブラリ のクラスローダリークバグを隠してしまういやん な機能 – 心当たりのあるフレームワーク / ライブラリ開発者 さんは直してください! ● でもその機能にスレッドセーフじゃないバグが あるので 6.0.27 以降は無効になっている – https://issues.apache.org/bugzilla/show_bug. cgi?id=48895
25.
パターン その2 java.util.
logging
26.
java.util.logging の Level ●
Level 継承するとクラスローダ がリークする ● ここ嫁 ● http://blogs.sun.com/fkieviet/entry/cl assloader_leaks_the_dreaded_java
27.
パターン その
3 既成 ライブラリ
28.
既成ライブラリ ●
元々複数のクラスローダ上で動作することを想 定していないライブラリ – ContextClassLoader や static フィールドの誤用 – ThreadLocal や WeakHashMap などの参照構造 の理解不足
29.
既成ライブラリ ●
Commons-logging – だいぶ前に一通り直ったけど、利用する側のコー ドによってはリークする ● Commons-beanutils – 1.8.0 時点で一応メジャーな問題は全部解決してい る – https://issues.apache.org/jira/browse/BEANU TILS-291 ● 他にもいっぱいあるよ!
Download