Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Evaluating ZGC with HBase
LINE Developers
PRO
November 23, 2019
Technology
3
4k
Evaluating ZGC with HBase
2019/11/23
JJUG CCC 2019 Fall
#ccc_m6
LINE Developers
PRO
November 23, 2019
Tweet
Share
More Decks by LINE Developers
See All by LINE Developers
SONiCをLINEのClosネットワークに導入した話 / A story to adopt SONiC in LINE’s Clos Network
line_developers
PRO
0
42
ML PM, DS PMってどんな仕事をしているの?
line_developers
PRO
1
200
LINE iOSエンジニアの日々 / LINE iOS Engineer Days
line_developers
PRO
1
130
“Do you have a virtual router?” Discuss how to use virtual routers
line_developers
PRO
0
470
LINEにおけるネットワーク自動化チーム / Network Automation Team in LINE
line_developers
PRO
0
230
ひとりで書ける! 日英文章作成のコツ / Do-it-yourself! - Tips for writing in Japanese-English
line_developers
PRO
1
400
UIT Survey 2022
line_developers
PRO
0
110
LINE’s Journey; Road to 4 Million Cores in the Private Cloud
line_developers
PRO
0
75
Investigating Kafka performance issue caused by lock contention in xfs
line_developers
PRO
0
230
Other Decks in Technology
See All in Technology
データベースの発表には RDBMS 以外もありますよ
maroon1st
0
220
Dev Containers ことはじめ - 失敗から学ぶ開発環境運用法
streamwest1629
0
260
Oktaの管理者権限を適切に移譲してみた
shimosyan
2
230
SmartHRからOktaへのSCIM連携で作り出すHRドリブンのアカウント管理
jousysmiler
1
100
私見「UNIXの考え方」/20230124-kameda-unix-phylosophy
opelab
0
140
エンタープライズ領域でのブロックチェーン・インターオペラビリティの発展 / Enterprise Blockchain Interoperability
gakumura
0
100
SPA・SSGでSSRのようなOGP対応!
simo123
2
140
GitHub Codespaces が拡げる開発環境、いつでもどこでも Visual Studio Code で!
dzeyelid
0
150
EMになって最初の失敗談 - コミュニケーション編 -
fukuiretu
1
330
AI Services 概要 / AI Services overview
oracle4engineer
PRO
0
160
20230121_BuriKaigi
oyakata2438
0
120
エアドロップ for オープンソースプロジェクト
epicsdao
0
190
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
108
5.9k
What's new in Ruby 2.0
geeforr
336
30k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1.1M
Design by the Numbers
sachag
271
18k
Raft: Consensus for Rubyists
vanstee
130
5.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
31
20k
Producing Creativity
orderedlist
PRO
335
37k
Side Projects
sachag
451
37k
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
The Invisible Side of Design
smashingmag
292
48k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
239
19k
Transcript
Evaluating ZGC with HBase LINE Corporation Shinya Yoshida 2019/11/23 JJUG
CCC 2019 Fall #ccc_m6
自己紹介 • Shinya Yoshida • 開発1センター 開発開発1室 開発Z Part 開発HBase Unit server Z
Part Other services
コンテンツ • Garbage CollectorとZGC • ZGC+HBaseの評価評価 – YCSB – 本番環境のリクエストの評価リクエスト
Garbage Collector • メモリ空間から不要なオブから不要なオブジェ不要なオブジェクトなオブジェクトをオブジェクトを除去する除去するする – 適切に除去するために除去するために除去するするために除去するためにアプリケーションを除去する止める必要める必要なオブジェクト • Stop The World(STW)
• 回収方法 • メモリ分割(世代分け、リージョン分けリージョン分け) – 今回は時間の都合で話時間から不要なオブの評価都合で話さないで話さない話さないさなオブジェクトをい
HBaseとGC • HBase = JVM上で動くで話さない動くくNoSQL – STW by GC Response
time Service ⇒ Respon ⇒ Respon ↑JVM Pause Time ↓HBase Response time
GC=ごみ収集収集/掃除
ごみ収集収集/掃除 • ゴミを見つけるを除去する見つけるつける • ゴミを見つけるを除去する回収して、リージョン分け空間から不要なオブを除去する 整理するする
GCアルゴリズム(回収方法) • 参照されていないされていなオブジェクトをい オブジェクト(ゴミを見つける)を除去する見つけるつける • 参照されていないカウント • Mark • Sweep/Compaction
– ゴミを見つけるを除去する削除して、リージョン分け空間から不要なオブを除去する整理する • Copy(Relocate) – 参照されていないされているオブジェクトを除去する 別の場所に移すの評価場所に移すに除去するために移すす – Markと同時に除去するためにする場合で話さないと 別の場所に移す々に行う場合があに除去するために行う場合があるう場合がある場合で話さないがある
フラグメンテーション がおきる アドレスが変わるわる アドレスが変わるわる 空間から不要なオブが余分に除去するために必要なオブジェクト Sweep/Compaction Copy
Javaの評価GC GCアルゴリズム 回収方法 Young GC Sequential/Parallel Copy Old GC Sequential/Parallel
Sweep&Compact Concurrent Mark & Sweep (Deprecated) Sweep G1GC Copy ZGC(Java11, Experimental) Copy Shenandoah(Java12, Experimental) Copy
STW • なオブジェクトをぜSTWが必要なオブジェクトか – 安全性(Must):ゴミ以外を回収ゴミを見つける以外を回収しないを除去する回収しなオブジェクトをい – 完全性(Option):ゴミ以外を回収ゴミを見つけるを除去するすべて回収しきる • STW時間から不要なオブは時間の都合で話アルゴリズムに除去するためによる –
アプリケーションの評価並行う場合がある性 – どれぐら不要なオブジェい止める必要めなオブジェクトをいといけなオブジェクトをいか – 何に比例して増えに除去するために比例して増えるかして増えるかえるか
GCアルゴリズムの評価STW時間から不要なオブ GCアルゴリズム Mark 回収 Old GC Sequential Parallel CMS(Deprecated) いつかFullGCが起きる可能性大きる可能性大
G1GC 実行う場合がある中にアドレスが変に除去するためにアドレスが変わるわると大変わる ただし、リージョン分けSTW時間から不要なオブは時間の都合で話制御可能 アプリケーションスレッド実行う場合がある中にアドレスが変 アプリケーションスレッドSTW GC実行う場合がある
ZGC • Ultra low pause time GC – 各STW時間から不要なオブを除去する絶対にに除去するために10ms以下にしたいに除去するためにしたい –
Java 11で話さない導入(Experimental) 4つの評価四角が並んだあの図が並んだあの評価図が入るが入る
GCアルゴリズムの評価STW時間から不要なオブ (2) GCアルゴリズム Mark 回収 Old GC Sequential Parallel CMS(Deprecated)
いつかFullGCが起きる可能性大きる可能性大 G1GC 実行う場合がある中にアドレスが変に除去するためにアドレスが変わるわると大変わる ただし、リージョン分けSTW時間から不要なオブは時間の都合で話制御可能 ZGC STW時間から不要なオブは時間の都合で話スレッド数に比例に除去するために比例して増えるか 各STW:10ms以下にしたい? Shenandoah 各STW:10ms以下にしたい? アプリケーションスレッド実行う場合がある中にアドレスが変 アプリケーションスレッドSTW GC実行う場合がある
ZGCの評価仕組みみ収集 • アプリケーションを除去する動くかしなオブジェクトをがら不要なオブジェ、リージョン分けオブジェクトの評価アドレスを除去する 変わるえる仕組みみ収集 • JJUG CCC 2018 Springで話さないあった発表を見てくださいを除去する見つけるてください –
https://speakerdeck.com/yokotaso/ introduction-to-modern-gc – https://blog.cybozu.io/entry/ 2018/05/29/080000 – By @yokotaso(Cybozu)
GCの評価選択
GCを除去する選ぶに除去するためには時間の都合で話 • GCの評価特性(得意な部分、苦手ななオブジェクトを部分、リージョン分け苦手な部分なオブジェクトを部分)を除去する知るる • アプリケーションの評価特性/ハードウェアを除去する考えるえる • 最も良さげなも良さげな良さげなさげなオブジェクトをGCを除去する選ぶ
GCの評価特性 • スループット?応答時間から不要なオブ?(STW時間から不要なオブ) • CPUコア数に比例 • メモリサイズ • ライブオブジェクト率 •
オブジェクトサイズ • なオブジェクトをどなオブジェクトをど
GCごとの評価特性 各STW時間から不要なオブ スループット 最も良さげな適なオブジェクトをCPU コア数に比例 最も良さげな適なオブジェクトをヒープ サイズ ∞ 85% 100%
1GB 8GB 512GB 8TB〜 0ms 100ms 1s 1 2 4 8 16 32+ 31GB 128GB 2TB Sequential/Parallel G1GC Shenandoah/ZGC
僕達のの評価HBaseは時間の都合で話・・・? • レスポンスタイムが大事 • いっぱいメモリを除去する使ってキャッシュってキャッシュしたいしたい • CPUリソース余りがち – SQLは時間の都合で話無いい –
シンプルなオブジェクトをGet/Scan/Put/Delete – IOとNetworkがほとんど • スループット/1台はそんなに大事は時間の都合で話そんなオブジェクトをに除去するために大事じゃなオブジェクトをい – スケールアウト前提 – ディスクとかメモリとかの評価ほう場合があるが厳しいしい マシンスペック例して増えるか • CPU: 40コア • メモリ: 256GB
GCごとの評価特性に除去するために当てはめるては時間の都合で話める 各STW時間から不要なオブ スループット 最も良さげな適なオブジェクトをCPU コア数に比例 最も良さげな適なオブジェクトをヒープ サイズ ∞ 85% 100%
1GB 8GB 512GB 8TB〜 0ms 100ms 1s 1 2 4 8 16 32+ 31GB 128GB 2TB Sequential/Parallel G1GC Shenandoah/ZGC
HBaseに除去するためには時間の都合で話ZGCが良さげなさそう場合がある! (Shenandoahで話さないも良さげな良さげないかも良さげなしれなオブジェクトをい)
Evaluate ZGC with HBase By YCSB Using production requests
YSCBで話さない評価 • テストクラスタで話さないHBase1.2.5+αを除去する構築 • Java11-eaで話さない動くかす (2018年8月実施のための評価ため) • ZGCを除去する有効にするに除去するためにする • ベンチマークツールYCSBで話さない評価
– リンク入れる – STW時間から不要なオブとslow responseの評価時間から不要なオブ、リージョン分けスループット – 比較として今使ってとして今使ってキャッシュっているG1GCも良さげな
STW時間から不要なオブ
レスポンスタイム G1GC ZGC Slow Response閾値 35ms
結果(スループット) Higher value (Bold) is better
なオブジェクトをんか良さげなさげなオブジェクトをの評価で話さない 本番に除去するために適用する?する?
そんなオブジェクトを簡単にはできないに除去するためには時間の都合で話で話さないきなオブジェクトをい
Java11≦で話さない動くかす(今は時間の都合で話Java8) ZGC(Experimental機能)を除去する有効にするに除去するためにする YSCBの評価ワークロードは時間の都合で話あくまで話さない仮想
本番環境のリクエストの評価リクエストと 同じリクエストで話さない試したいしたい
RPC Response JDK8+G1GC App Server
RPC Response JDK8+G1GC Consumer RPC Info JDK13.0.1+ZGC JDK8+G1GC RPC Response
App Server hbase-shadows
RPC Response JDK8+G1GC Consumer RPC Info JDK13.0.1+ZGC JDK8+G1GC RPC*3 Response
App Server hbase-shadows
JVM Pause Time ↑JVM Pause Time – HOST_A: ZGC –
HOST_B (Green plot): G1GC 100ms
HBaseレスポンスタイム(ms)は時間の都合で話? ↑G1GC ↓ZGC(ピンク、リージョン分け紫) 1,200 400 350 100
GCログを除去する読むとむと [2019-10-17T16:51:41.908+0900][139132][info][gc,phases ] GC(31) Concurrent Destroy Detached Pages 0.001ms [2019-10-17T16:51:42.067+0900][139132][info][gc,heap
] Page Cache Flushed: 14M requested, 14M(77272M->77258M) flushed [2019-10-17T16:51:42.069+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77258M->77226M) flushed [2019-10-17T16:51:42.073+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77226M->77194M) flushed [2019-10-17T16:51:42.077+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77194M->77162M) flushed [2019-10-17T16:51:42.082+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77162M->77130M) flushed [2019-10-17T16:51:42.086+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77130M->77098M) flushed [2019-10-17T16:51:42.091+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77098M->77066M) flushed [2019-10-17T16:51:42.095+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(77066M->77034M) flushed ... [2019-10-17T16:51:42.729+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72548M->72516M) flushed [2019-10-17T16:51:42.734+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72516M->72484M) flushed [2019-10-17T16:51:42.739+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72484M->72452M) flushed [2019-10-17T16:51:42.745+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72452M->72420M) flushed [2019-10-17T16:51:42.749+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72420M->72388M) flushed [2019-10-17T16:51:42.755+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72388M->72356M) flushed [2019-10-17T16:51:42.759+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72356M->72324M) flushed [2019-10-17T16:51:42.763+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72324M->72292M) flushed [2019-10-17T16:51:42.769+0900][139132][info][gc,heap ] Page Cache Flushed: 32M requested, 32M(72292M->72260M) flushed
大きなオブジェクトをオブジェクトの評価割当てはめるに除去するために弱い?い? List<Integer> sizes = asList( 512, kb(1), kb(10), kb(50), kb(500),
mb(1), mb(10), mb(20), mb(30)); for (int i = 0; i < 20; i++) { new Thread(() -> { while (true) { int size = takeRandom(sizes); long[] nanos = allocate(size, 50); sort(nanos); long maxMs = NANOSECONDS.toMillis(nanos[49]); if (maxMs > 100) { loggingTop20(size, nanos); } sleep(10); } }).start(); } long[] allocate(int nBytes, int nTimes) { long[] nanos = new long[nTimes]; for (int i = 0; i < nTimes; i++) { long start = nanoTime(); BLACKHOLE.accept(new byte[nBytes]); nanos[i] = nanoTime() - start; } return nanos; }
Demo • ↑G1GC • ↓ZGC
PageとLargePage • 1Page=4KB (環境のリクエスト依存) – 30MB分の評価Page = 7000 Page以上で動く •
LargePage – 2MB (環境のリクエスト依存) – Page Flushの評価オーバヘッドが小さくなる?さくなオブジェクトをる?
Use LargePage from ZGC • # echo 65,536 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
– 65,536 = 128GB (ヒープサイズ+α) / 2MB) / 2MB (Linuxの評価LargePageサイズ) • # mkdir /hugepages • # mount -t hugetlbfs -o uid=123 nodev /hugepages • $ java … -XX:+UseLargePages -XX:Zpath=/hugepages … • https://wiki.openjdk.java.net/display/zgc/Main#Main-Enablin gLargePagesOnLinux
Demo • LargePageを除去する有効にするに除去するためにしてみ収集る
HBase Reponse Time with ZGC + LP • 緑: ZGC
• 青: G1GC 300 ms JVM Pause Time (緑: G1GC)
まとめ • Javaに除去するために新しいしいGCが! – ZGC、リージョン分けShenandoah: まだExperimental – ちゃんと特性を除去する分かって選ぶことが大事 • 本番環境のリクエストの評価HBaseに除去するためにZGCを除去する適用する?する前に除去するために、リージョン分け
本番環境のリクエストに除去するために来るリクエストをるリクエストを除去する再現して評価して評価 • Low JVM Pause != Low Response Time – LargePage使ってキャッシュう場合があると概ね良くなるね良くなる良さげなくなオブジェクトをる – Response Timeがより良さげなくなオブジェクトをるよう場合があるに除去するために更に調査に除去するために調査