Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Evaluating ZGC with HBase

Evaluating ZGC with HBase

2019/11/23
JJUG CCC 2019 Fall
#ccc_m6

Avatar for LINE Developers

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がより良さげなくなオブゞェクトをるよう堎合があるに陀去するために曎に調査に陀去するために調査