SlideShare a Scribd company logo
1 of 18
JVM的なナニカを話す
-‐‑‒GC戦略略をそえて-‐‑‒
@shot6
というわけで
•  おおたに、です
•  @shot6
•  最近は?
– Go,  Hackなどを触るなど
h"p://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html	
  
ヒープストラクチャの基本
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From(S0)	
   TO(S1)	
  
•  Young  Generation
•  新規で⽣生成されたオブジェクトの⼊入るスペース
•  Eden,  Survivor(S0  and  S1)
•  Old  Generation
•  より⽣生存期間の⻑⾧長いオブジェクトの⼊入るスペース
•  Permanent  Generation(Java8でMetaspaceへ)
•  クラスやメソッド/Code  Cacheが⼊入るスペース
マイナーGC
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
マイナーGC
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
マイナーGC
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
Agingされて格納
マイナーGC
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
消去!	
  
マイナーGC
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
Swapされる(ハズ)
メジャーGC
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
Old/Permが増加してくるとメジャーGCが発⽣生する
・より影響のでかいStop  the  World
・パーマネント領領域(user  classloaderの参照切切れ)
設定項⽬目の基本
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
-‐‑‒Xmx -‐‑‒XX:MaxPermSize
-‐‑‒XX:PermSize
-‐‑‒Xms
-‐‑‒XX:MaxNewSize
-‐‑‒XX:NewSize
設定項⽬目の基本(2)
予
約	
  
予
約	
  
予
約	
  
Permanent	
  
GeneraAon	
  
(Class,	
  システム)	
  
Old	
  GeneraAon	
  
Eden	
  
Young	
  GeneraAon	
  
From	
   TO	
  
Young  :  Old
-‐‑‒XX:NewRatio(2)
Eden  :  Survivor(From+To)
-‐‑‒XX:NewSurvivorRatio(8:1:1)
Oldへのプロモーション
-‐‑‒XX:MaxTeruningThreshold(15?)
JVMでの⼀一貫したパフォーマンス
のためには
•  マイナーGCを許容して、メジャーGCを  
極⼒力力起こさせないのが⼤大事
– Concurrent  Mark  and  Sweep(CMS)
– でも最近はG1もあるよ(-‐‑‒XX:+UseG1GC)
– Garbage  First  Garbage  Collection
•  Heap領領域を2048個のRegionに分割して管理理
•  0.5秒以内にGCが終わるよう推測モデルを持つ?
GCの基本戦略略
•  基本はConcurrent  Mark  Sweep(CMS)
–  -‐‑‒XX:+UseConcMarkSweepGCで。
–  Young領領域はParallel  GC
–  Old領領域はCMSで実施
•  CPUコアが少ないとき(1  or  2)はCMS  Incremental
–  -‐‑‒XX:+UseConcMarkSweepGC  –XX:
+CMSIncrementalMode
–  ちょいちょいヒープを解放。Oldの解放時間は⻑⾧長めになる
•  G1GCには期待値⼤大。ただどんくらい使われてる?
–  -‐‑‒XX:UseG1GC
–  6GB以上のヒープのときに最も有効
–  Java7で本格導⼊入
比較	
  
Collector	
   Young領域	
   Old領域	
   コンパクション	
   利点	
   欠点	
   コマンドLINE	
  
Serial	
   Serial/STW	
   シリアルに
CMS	
  
あり	
   あんの?	
   -­‐XX:
+UseSerialGC	
  
Parallel	
   Parallel/
STW	
  
シリアルに
CMS	
  
あり	
   Youngの
Collect	
  
Oldの遅さ	
   -­‐XX:
+UseParallelGC	
  
Parallel	
  
CompacAng	
  
Parallel/
STW	
  
Parallelにコ
ンパクション	
  
あり	
   OldのCollect
も早い	
  
忘れたw	
   -­‐XX:
+UseParallelOld
GC	
  
	
  
Concurrent	
  
Mark	
  
Sweep(CMS)	
  
Parallel/
STW	
  
ほぼ並行に
Collectと
Concurrent	
  
Mark/IniAal	
  
MarkとRemarkで
はSTW	
  
なし	
   OldでもSTW
が短い	
  
並列Collect中
にCPUくう。
Youngでの
Pause多い。
追加のヒープ	
  
-­‐XX:
+UseConcMarkS
weepGC	
  
	
  
CMS	
  
Increment	
  
Parallel/
STW	
  
上と同じ	
   なし	
   上と同様だ
がより少な
いCPUで効
果的	
  
上記同様	
   -­‐XX:
+CMSIncrement
alMode	
  
	
  
G1	
   リージョン分割(one	
  region	
  
1MB)して、Markしガーベー
ジ収集。	
  
ほぼあり	
   予測可能な
STW(<	
  0.5	
  
sec)、でかい
ヒープで有効	
  
スループット
の劣化	
  
-­‐XX:+UseG1GC	
  
STW	
  =	
  Stop	
  the	
  World	
  
その他のTips
•  JVMエルゴノミクスは避けましょう
–  -‐‑‒serverで明⽰示的な指定を
–  Server-‐‑‒class  Machine  Detection
•  http://docs.oracle.com/javase/7/docs/technotes/
guides/vm/server-‐‑‒class.html
•  Parallel  Collector/CMS/G1GC向け
–  -‐‑‒XX:ParallelGCThreads
–  -‐‑‒XX:MaxGCPauseMillis
ご参考
•  Java  SE  6  HotSpot  Virtual  Machine  
Garbage  Collection  Tuning
–  http://www.oracle.com/technetwork/java/
javase/gc-‐‑‒tuning-‐‑‒6-‐‑‒140523.html  
•  G1GCなどの各オプション
–  http://www.oracle.com/technetwork/java/
javase/tech/vmoptions-‐‑‒jsp-‐‑‒140102.html
•  Java  Garbage  Collection  Basics
–  http://www.oracle.com/webfolder/
technetwork/tutorials/obe/java/gc01/
index.html
ありがとうございました

More Related Content

What's hot

jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみようTsunenaga Hanyuda
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Yuji Kubota
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewYuji Kubota
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTYuji Kubota
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考えるchonaso
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツールYasumasa Suenaga
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
Serviceability Toolsの裏側
Serviceability Toolsの裏側Serviceability Toolsの裏側
Serviceability Toolsの裏側Yasumasa Suenaga
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編まべ☆てっく運営
 
Jvm internal
Jvm internalJvm internal
Jvm internalGo Tanaka
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTWebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTmganeko
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部NVIDIA Japan
 
Versatil Javaチューニング
Versatil JavaチューニングVersatil Javaチューニング
Versatil JavaチューニングKenji Kazumura
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方Funato Takashi
 
Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要HonMarkHunt
 
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツA100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツKuninobu SaSaki
 

What's hot (20)

jcmd をさわってみよう
jcmd をさわってみようjcmd をさわってみよう
jcmd をさわってみよう
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Serviceability Toolsの裏側
Serviceability Toolsの裏側Serviceability Toolsの裏側
Serviceability Toolsの裏側
 
CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
Jvm internal
Jvm internalJvm internal
Jvm internal
 
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LTWebRTC getStats - WebRTC Meetup Tokyo 5 LT
WebRTC getStats - WebRTC Meetup Tokyo 5 LT
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
 
Dart VM Performance
Dart VM PerformanceDart VM Performance
Dart VM Performance
 
Versatil Javaチューニング
Versatil JavaチューニングVersatil Javaチューニング
Versatil Javaチューニング
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要
 
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツA100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 

Viewers also liked

Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talksoranie Narut
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and CassandraChris Lohfink
 
Amazon Aurora: Amazon’s New Relational Database Engine
Amazon Aurora: Amazon’s New Relational Database EngineAmazon Aurora: Amazon’s New Relational Database Engine
Amazon Aurora: Amazon’s New Relational Database EngineAmazon Web Services
 
ECS for Docker Meetup #4
ECS for Docker Meetup #4ECS for Docker Meetup #4
ECS for Docker Meetup #4Shinpei Ohtani
 
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayAWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayShinpei Ohtani
 

Viewers also liked (6)

Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talks
 
G1 collector and tuning and Cassandra
G1 collector and tuning and CassandraG1 collector and tuning and Cassandra
G1 collector and tuning and Cassandra
 
Amazon Aurora: Amazon’s New Relational Database Engine
Amazon Aurora: Amazon’s New Relational Database EngineAmazon Aurora: Amazon’s New Relational Database Engine
Amazon Aurora: Amazon’s New Relational Database Engine
 
ECS for Docker Meetup #4
ECS for Docker Meetup #4ECS for Docker Meetup #4
ECS for Docker Meetup #4
 
AWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API GatewayAWS Lambda and Amazon API Gateway
AWS Lambda and Amazon API Gateway
 
Amazon Aurora
Amazon AuroraAmazon Aurora
Amazon Aurora
 

Similar to JVM的な何か@JVM Operation Casual Talk

Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Chihiro Ito
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepMinoru Nakamura
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~Shinji Takao
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpYuji Kubota
 
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]David Buck
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVMKoichi Sakata
 
Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!YujiSoftware
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証BrainPad Inc.
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。dec9ue
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiKen'ichi Sakiyama
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]David Buck
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Takeshi Arabiki
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.jsYoshiiro Ueno
 

Similar to JVM的な何か@JVM Operation Casual Talk (20)

Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
JVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweepJVM-Reading-ConcurrentMarkSweep
JVM-Reading-ConcurrentMarkSweep
 
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
 
JVM-Reading-ParalleGC
JVM-Reading-ParalleGCJVM-Reading-ParalleGC
JVM-Reading-ParalleGC
 
Jvm reading-parallel gc
Jvm reading-parallel gcJvm reading-parallel gc
Jvm reading-parallel gc
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
 
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
 
[DL Hacks]FPGA入門
[DL Hacks]FPGA入門[DL Hacks]FPGA入門
[DL Hacks]FPGA入門
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
 
Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!
 
Sparkパフォーマンス検証
Sparkパフォーマンス検証Sparkパフォーマンス検証
Sparkパフォーマンス検証
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
Startup JavaScript
Startup JavaScriptStartup JavaScript
Startup JavaScript
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 

More from Shinpei Ohtani

Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Shinpei Ohtani
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallShinpei Ohtani
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦めShinpei Ohtani
 
サンプルから見るMapReduceコード
サンプルから見るMapReduceコードサンプルから見るMapReduceコード
サンプルから見るMapReduceコードShinpei Ohtani
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダShinpei Ohtani
 
サンプルから見るMap reduceコード
サンプルから見るMap reduceコードサンプルから見るMap reduceコード
サンプルから見るMap reduceコードShinpei Ohtani
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダShinpei Ohtani
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 

More from Shinpei Ohtani (14)

Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
Amazon kinesisで広がるリアルタイムデータプロセッシングとその未来
 
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 FallAmazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
 
プログラマブルクラウドの薦め
プログラマブルクラウドの薦めプログラマブルクラウドの薦め
プログラマブルクラウドの薦め
 
サンプルから見るMapReduceコード
サンプルから見るMapReduceコードサンプルから見るMapReduceコード
サンプルから見るMapReduceコード
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダ
 
サンプルから見るMap reduceコード
サンプルから見るMap reduceコードサンプルから見るMap reduceコード
サンプルから見るMap reduceコード
 
Hadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダHadoopソースリーディング第1回アジェンダ
Hadoopソースリーディング第1回アジェンダ
 
はやわかりHadoop
はやわかりHadoopはやわかりHadoop
はやわかりHadoop
 
T2 Web Framework
T2 Web FrameworkT2 Web Framework
T2 Web Framework
 
T2 Hacks
T2 HacksT2 Hacks
T2 Hacks
 
T2 webframework
T2 webframeworkT2 webframework
T2 webframework
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Struts2 in a nutshell
Struts2 in a nutshellStruts2 in a nutshell
Struts2 in a nutshell
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 

Recently uploaded

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (9)

UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

JVM的な何か@JVM Operation Casual Talk

  • 2. というわけで •  おおたに、です •  @shot6 •  最近は? – Go,  Hackなどを触るなど
  • 4. ヒープストラクチャの基本 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From(S0)   TO(S1)   •  Young  Generation •  新規で⽣生成されたオブジェクトの⼊入るスペース •  Eden,  Survivor(S0  and  S1) •  Old  Generation •  より⽣生存期間の⻑⾧長いオブジェクトの⼊入るスペース •  Permanent  Generation(Java8でMetaspaceへ) •  クラスやメソッド/Code  Cacheが⼊入るスペース
  • 5. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO  
  • 6. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO  
  • 7. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Agingされて格納
  • 8. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   消去!  
  • 9. マイナーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Swapされる(ハズ)
  • 10. メジャーGC 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Old/Permが増加してくるとメジャーGCが発⽣生する ・より影響のでかいStop  the  World ・パーマネント領領域(user  classloaderの参照切切れ)
  • 11. 設定項⽬目の基本 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   -‐‑‒Xmx -‐‑‒XX:MaxPermSize -‐‑‒XX:PermSize -‐‑‒Xms -‐‑‒XX:MaxNewSize -‐‑‒XX:NewSize
  • 12. 設定項⽬目の基本(2) 予 約   予 約   予 約   Permanent   GeneraAon   (Class,  システム)   Old  GeneraAon   Eden   Young  GeneraAon   From   TO   Young  :  Old -‐‑‒XX:NewRatio(2) Eden  :  Survivor(From+To) -‐‑‒XX:NewSurvivorRatio(8:1:1) Oldへのプロモーション -‐‑‒XX:MaxTeruningThreshold(15?)
  • 13. JVMでの⼀一貫したパフォーマンス のためには •  マイナーGCを許容して、メジャーGCを   極⼒力力起こさせないのが⼤大事 – Concurrent  Mark  and  Sweep(CMS) – でも最近はG1もあるよ(-‐‑‒XX:+UseG1GC) – Garbage  First  Garbage  Collection •  Heap領領域を2048個のRegionに分割して管理理 •  0.5秒以内にGCが終わるよう推測モデルを持つ?
  • 14. GCの基本戦略略 •  基本はConcurrent  Mark  Sweep(CMS) –  -‐‑‒XX:+UseConcMarkSweepGCで。 –  Young領領域はParallel  GC –  Old領領域はCMSで実施 •  CPUコアが少ないとき(1  or  2)はCMS  Incremental –  -‐‑‒XX:+UseConcMarkSweepGC  –XX: +CMSIncrementalMode –  ちょいちょいヒープを解放。Oldの解放時間は⻑⾧長めになる •  G1GCには期待値⼤大。ただどんくらい使われてる? –  -‐‑‒XX:UseG1GC –  6GB以上のヒープのときに最も有効 –  Java7で本格導⼊入
  • 15. 比較   Collector   Young領域   Old領域   コンパクション   利点   欠点   コマンドLINE   Serial   Serial/STW   シリアルに CMS   あり   あんの?   -­‐XX: +UseSerialGC   Parallel   Parallel/ STW   シリアルに CMS   あり   Youngの Collect   Oldの遅さ   -­‐XX: +UseParallelGC   Parallel   CompacAng   Parallel/ STW   Parallelにコ ンパクション   あり   OldのCollect も早い   忘れたw   -­‐XX: +UseParallelOld GC     Concurrent   Mark   Sweep(CMS)   Parallel/ STW   ほぼ並行に Collectと Concurrent   Mark/IniAal   MarkとRemarkで はSTW   なし   OldでもSTW が短い   並列Collect中 にCPUくう。 Youngでの Pause多い。 追加のヒープ   -­‐XX: +UseConcMarkS weepGC     CMS   Increment   Parallel/ STW   上と同じ   なし   上と同様だ がより少な いCPUで効 果的   上記同様   -­‐XX: +CMSIncrement alMode     G1   リージョン分割(one  region   1MB)して、Markしガーベー ジ収集。   ほぼあり   予測可能な STW(<  0.5   sec)、でかい ヒープで有効   スループット の劣化   -­‐XX:+UseG1GC   STW  =  Stop  the  World  
  • 16. その他のTips •  JVMエルゴノミクスは避けましょう –  -‐‑‒serverで明⽰示的な指定を –  Server-‐‑‒class  Machine  Detection •  http://docs.oracle.com/javase/7/docs/technotes/ guides/vm/server-‐‑‒class.html •  Parallel  Collector/CMS/G1GC向け –  -‐‑‒XX:ParallelGCThreads –  -‐‑‒XX:MaxGCPauseMillis
  • 17. ご参考 •  Java  SE  6  HotSpot  Virtual  Machine   Garbage  Collection  Tuning –  http://www.oracle.com/technetwork/java/ javase/gc-‐‑‒tuning-‐‑‒6-‐‑‒140523.html   •  G1GCなどの各オプション –  http://www.oracle.com/technetwork/java/ javase/tech/vmoptions-‐‑‒jsp-‐‑‒140102.html •  Java  Garbage  Collection  Basics –  http://www.oracle.com/webfolder/ technetwork/tutorials/obe/java/gc01/ index.html