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

Exploring ZGC over Java 11~15

Exploring ZGC over Java 11~15

Exploring ZGC over Java 11~15
Burikaigi2021

LINE Developers

January 31, 2021
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. 自己紹介 • 吉田真也 – LINE株式会社 • LINE Platform Developmentセンター1 •

    Messaging Platform Development室 • Z Partチーム HBase Unit • LINEのメッセンジャーメッセンジャーのメッセンジャーサーバサイド、HBase関連ののメッセンジャーDev/Ops サーバ Other services
  2. Javaどれ使ってますか?使ってますか?ってますか? • Java 16 ea • Java 15 (2020 Late)

    • Java 14 (2020 Early) • Java 13 (2019 Late) • Java 12 (2019 Early) • Java 11 (2018 Late, LTS) • Java 10 (2018 Early) • Java 9 (2017 Late) • Java 8 (2014) • Java 7 (2011) • Java 6 (2006)
  3. GC気にしていますかにしていますか? • 世代別Serial • 世代別Parallel • CMS (Removed in Java

    14) • G1GC (Experimental in Java 6, Default in Java 9) • Epsilon GC (Introduced in Java 11)
  4. ZGC Next generation Production ready Java15 STW: Stop The World,

    JVM Pause Time Low latency STW<=10ms Goal: <=1ms Scalable Up to TB scale Throughput reduction 15%
  5. Enable ZGC • -XX:+UseZGC • -Xms -Xmx • -XX:ConcGCThreads=<number> –

    基本的にはにはdefaultでOK • -XX:+UseLargePages -XX:AllocateHeapAt=/hugepages – Large pageを使う場合のみ使ってますか?う場合のみ場合のみのメッセンジャーみ
  6. ZGC Next generation Production ready Java15 STW: Stop The World,

    JVM Pause Time Low latency STW<=10ms Goal: <=1ms Scalable Up to TB scale Throughput reduction 15%
  7. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc mark Mark end Prepare for reloc Reloc start Conc reloc Conc remap STW 10ms ≦10ms
  8. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc mark Mark end Prepare for reloc Reloc start Conc reloc Conc remap STW 10ms ≦10ms
  9. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc mark Mark end Prepare for reloc Reloc start Conc reloc Conc remap STW 10ms ≦10ms Walk root set Thread stack Walk root set Thread stack Walk root set (Thread stack)
  10. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc mark Mark end Prepare for reloc Reloc start Conc reloc Conc remap STW 10ms ≦10ms Walk object graph Mark alive objects Choose relocation set Copy object to another page Walk object graph Update pointer to refer new location
  11. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc mark Mark end Prepare for reloc Reloc start Conc reloc Conc remap STW 10ms ≦10ms Walk object graph Mark alive objects Choose relocation set Copy object to another page Walk object graph Update pointer to refer new location
  12. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc remap &mark Mark end Prepare for reloc Reloc start Conc reloc STW 10ms ≦10ms Conc remap &mark Mark start GC(N) GC(N+1) GC(N-1)
  13. Load barrier Object o = obj.field; <load barrier for o>

    // Use o • ポインタのメッセンジャー状態によってによってapp threadで処理をするを使う場合のみする – Mark: 未mark mark ⇒mark – Relocate/remap: 未relocate/remap relocate/remap ⇒mark
  14. Relocate and remap O A Marked(A) A A’ O A

    Marked(A) A’ A A’ ⇒ A’ A A’ O A A’ A A’ ⇒ A’ Remapped(A’) Relocate Remap
  15. 本当ににSTW<=10ms? • テスに埋め込むト用用HBaseクラスに埋め込むタ – 本番環境と同じと不整合同じじHBaseバージョン – 本番環境と同じに近いマシンスペッいマシンスに埋め込むペック – Java 11,

    15 + ZGC • 実アプリ、実ワーアプリ、実アプリ、実ワーワークロードを使う場合のみ再現して評価して評価 – LINEのメッセンジャーメッセンジャーのメッセンジャーと不整合あるテーブルのメッセンジャーワークロード
  16. Consumer RPC Info JDK11.0.1+ZGC JDK15.0.1+ZGC RPC Response hbase-shadows Intercept テスに埋め込むト用環境と同じ

    Shadow hbase requests RPC Response JDK8+G1GC App Server 本番環境と同じ HBase client
  17. ZGCと不整合のメッセンジャー関係 • HBase log 2019-10-17 16:51:42,763 WARN [RpcServer.default.RWQ.Fifo.write.handler=45,queue=20,port=xxxxx] ipc.RpcServer: (responseTooSlow):

    {"call":"Multi(org.apache.hadoop.hbase.protobuf.generated.ClientProtos$MultiRequest)","starttimems":1571298702070,"responsesiz e":10,"method":"Multi","param":"region= xxx,xxx.xxx., for 1 action(s) and 1st row key=xxx","processingtimems":693,"client":"xxx.xxx.xxx.xxx:xxx","queuetimems":69,"class":"HregionServer"} • GC log [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.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
  18. Page Cache Flushのメッセンジャー改善 • Java 11 – GCのメッセンジャータイミングはで全てのてのメッセンジャーDetached pageを使う場合のみFlush •

    Java 13 – ZGC: Delete ZPages using ZSafeDelete • https://bugs.openjdk.java.net/browse/JDK-8220600 • Detached pageが発生するタイミングするタイミングはで極力Flush • Java 15 – ZGC: Introduce ZUnmapper to asynchronous unmap pages • https://bugs.openjdk.java.net/browse/JDK-8246220 • Page flushを使う場合のみ非同じ期にに
  19. ZGCと不整合のメッセンジャー関係 • HBase log 2021-01-27 14:58:35,646 WARN [RpcServer.default.RWQ.Fifo.write.handler=251,queue=1,port=xxxxx] ipc.RpcServer: (responseTooSlow):

    {"call":"Multi(org.apache.hadoop.hbase.protobuf.generated.ClientProtos$MultiRequest)","multi.gets":0,"start timems":"1611727115562","responsesize":"10","method":"Multi","param":"xxx","processingtimems":84,"cli ent":"xxx.xxx.xxx.xxx:xxxxx","queuetimems":0,"multi.servicecalls":0,"class":"HregionServer","multi.mutation s":1} – 35.646-84ms = 35.562 • GC Log [2021-01-27T14:58:35.562+0900][27519][info ][safepoint ] Safepoint "ZRelocateStart", Time since last: 85766444 ns, Reaching safepoint: 643999 ns, At safepoint: 381759 ns, Total: 1025758 ns [2021-01-27T14:58:36.059+0900][27519][info ][gc,phases ] GC(4272) Concurrent Relocate 496.877ms
  20. ZGC: GCサイクル App thread GC thread STW 10ms ≦10ms STW

    10ms ≦10ms STW 10ms ≦10ms Mark start Conc remap &mark Mark end Prepare for reloc Reloc start Conc reloc STW 10ms ≦10ms Conc remap &mark Mark start GC(N) GC(N+1) GC(N)
  21. Load barrier Object o = obj.field; <load barrier for o>

    // Use o • ポインタのメッセンジャー状態によってによってapp threadで処理をするを使う場合のみする – Mark: 未mark mark ⇒mark – Relocate/remap: 未relocate/remap relocate/remap ⇒mark
  22. まと不整合め込む • ZGC – Java15でプロダクションレディに!に! – Load barrier, Colored pointer,

    仮想メモリメモリなどを使う場合のみ活用して並行ににGC • 性能評価 – 実アプリ、実ワーアプリケーション、実アプリ、実ワーワークロードに近いマシンスペッいテスに埋め込むト用環境と同じ – 『JVM STW』が概ねが概ねね10ms以下でも • アプリケーションスに埋め込むレッドが10ms以上詰まらないというまらないと不整合は言っていないっていない(重要) – 現して評価状、アプリケーションが詰まらないというまるケースに埋め込むがある • 大きい問題はきい問題ははJava 15までに修正済みフラグはみ • 今後の改善に期待のメッセンジャー改善に期に待