Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Evaluating ZGC with HBase

Evaluating ZGC with HBase

2019/11/23
JJUG CCC 2019 Fall
#ccc_m6

LINE Developers

November 23, 2019
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. HBaseとGC • HBase = JVM上で動くで話さない動くくNoSQL – STW by GC Response

    time Service ⇒ Respon ⇒ Respon ↑JVM Pause Time ↓HBase Response time
  2. GCアルゴリズム(回収方法) • 参照されていないされていなオブジェクトをい オブジェクト(ゴミを見つける)を除去する見つけるつける • 参照されていないカウント • Mark • Sweep/Compaction

    – ゴミを見つけるを除去する削除して、リージョン分け空間から不要なオブを除去する整理する • Copy(Relocate) – 参照されていないされているオブジェクトを除去する 別の場所に移すの評価場所に移すに除去するために移すす – Markと同時に除去するためにする場合で話さないと 別の場所に移す々に行う場合があに除去するために行う場合があるう場合がある場合で話さないがある
  3. 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
  4. STW • なオブジェクトをぜSTWが必要なオブジェクトか – 安全性(Must):ゴミ以外を回収ゴミを見つける以外を回収しないを除去する回収しなオブジェクトをい – 完全性(Option):ゴミ以外を回収ゴミを見つけるを除去するすべて回収しきる • STW時間から不要なオブは時間の都合で話アルゴリズムに除去するためによる –

    アプリケーションの評価並行う場合がある性 – どれぐら不要なオブジェい止める必要めなオブジェクトをいといけなオブジェクトをいか – 何に比例して増えに除去するために比例して増えるかして増えるかえるか
  5. GCアルゴリズムの評価STW時間から不要なオブ GCアルゴリズム Mark 回収 Old GC Sequential Parallel CMS(Deprecated) いつかFullGCが起きる可能性大きる可能性大

    G1GC 実行う場合がある中にアドレスが変に除去するためにアドレスが変わるわると大変わる ただし、リージョン分けSTW時間から不要なオブは時間の都合で話制御可能 アプリケーションスレッド実行う場合がある中にアドレスが変 アプリケーションスレッドSTW GC実行う場合がある
  6. ZGC • Ultra low pause time GC – 各STW時間から不要なオブを除去する絶対にに除去するために10ms以下にしたいに除去するためにしたい –

    Java 11で話さない導入(Experimental) 4つの評価四角が並んだあの図が並んだあの評価図が入るが入る
  7. GCアルゴリズムの評価STW時間から不要なオブ (2) GCアルゴリズム Mark 回収 Old GC Sequential Parallel CMS(Deprecated)

    いつかFullGCが起きる可能性大きる可能性大 G1GC 実行う場合がある中にアドレスが変に除去するためにアドレスが変わるわると大変わる ただし、リージョン分けSTW時間から不要なオブは時間の都合で話制御可能 ZGC STW時間から不要なオブは時間の都合で話スレッド数に比例に除去するために比例して増えるか 各STW:10ms以下にしたい? Shenandoah 各STW:10ms以下にしたい? アプリケーションスレッド実行う場合がある中にアドレスが変 アプリケーションスレッドSTW GC実行う場合がある
  8. 僕達のの評価HBaseは時間の都合で話・・・? • レスポンスタイムが大事 • いっぱいメモリを除去する使ってキャッシュってキャッシュしたいしたい • CPUリソース余りがち – SQLは時間の都合で話無いい –

    シンプルなオブジェクトをGet/Scan/Put/Delete – IOとNetworkがほとんど • スループット/1台はそんなに大事は時間の都合で話そんなオブジェクトをに除去するために大事じゃなオブジェクトをい – スケールアウト前提 – ディスクとかメモリとかの評価ほう場合があるが厳しいしい マシンスペック例して増えるか • CPU: 40コア • メモリ: 256GB
  9. YSCBで話さない評価 • テストクラスタで話さないHBase1.2.5+αを除去する構築 • Java11-eaで話さない動くかす (2018年8月実施のための評価ため) • ZGCを除去する有効にするに除去するためにする • ベンチマークツールYCSBで話さない評価

    – リンク入れる – STW時間から不要なオブとslow responseの評価時間から不要なオブ、リージョン分けスループット – 比較として今使ってとして今使ってキャッシュっているG1GCも良さげな
  10. 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
  11. 大きなオブジェクトをオブジェクトの評価割当てはめるに除去するために弱い?い? 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; }
  12. PageとLargePage • 1Page=4KB (環境のリクエスト依存) – 30MB分の評価Page = 7000 Page以上で動く •

    LargePage – 2MB (環境のリクエスト依存) – Page Flushの評価オーバヘッドが小さくなる?さくなオブジェクトをる?
  13. 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
  14. HBase Reponse Time with ZGC + LP • 緑: ZGC

    • 青: G1GC 300 ms JVM Pause Time (緑: G1GC)
  15. まとめ • Javaに除去するために新しいしいGCが! – ZGC、リージョン分けShenandoah: まだExperimental – ちゃんと特性を除去する分かって選ぶことが大事 • 本番環境のリクエストの評価HBaseに除去するためにZGCを除去する適用する?する前に除去するために、リージョン分け

    本番環境のリクエストに除去するために来るリクエストをるリクエストを除去する再現して評価して評価 • Low JVM Pause != Low Response Time – LargePage使ってキャッシュう場合があると概ね良くなるね良くなる良さげなくなオブジェクトをる – Response Timeがより良さげなくなオブジェクトをるよう場合があるに除去するために更に調査に除去するために調査