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

hbstudy#82 FullGCとの闘い

hbstudy#82 FullGCとの闘い

UZABASE SRE Teamとして「FullGCとの闘い」というテーマで発表 @SRE大全(hbstudy#82)

Avatar for Hirofumi Kubo

Hirofumi Kubo

March 19, 2018

Other Decks in Technology

Transcript

  1. 自己紹介 • 久保 裕史 (Hirofumi Kubo) – UZABASE, Inc SRE

    Team – Infrastructure Engineer • 前職(2014/04 ~ 2017/03) – 新卒で入社した大手SIerで3年 – 様々な顧客の業務システムやWebサービスのインフラ構築・運用 – AWS/オンプレ両方 • UZABASEにJoin(2017/05 ~) – SPEEDAのインフラ構築・運用 – UZABASEグループ内のWordPressサイト運用 – 最近は、GoでCleanArchitecture&DDDでアプリケーション開発も
  2. • SPEEDA の特徴 • SPEEDA のJVMメモリ設計 • SPEEDA における課題 •

    どのように改善したか? ◦ Step1:GC起動オプションチューニング ◦ Step2:sessionサーバ導入 ◦ Step3:Tomcat定期restart ◦ Step4:GC/JVM変更 • まとめ
  3. STEP2:sessionサーバ導入(内製) • ①session情報の外出し – よりSPEEDAに最適化されたsessionサーバを内製 – アプリケーションを改修し、session情報の削減 ⇒1GB/ユーザ から 数MB/ユーザ に • ②ユーザのsession情報を外出しできたことで、LBから切り離してのキャッシュデータ最新化が

    可能に  ⇒オンラインリロードのために必要だった倍のメモリ量( 20GB)は不要に 20GB 20GB 20GB APサーバ ユーザのデータ領域 キャッシュデータ(新) キャッシュデータ(古) 20GB 20GB 20GB APサーバ 20GB 20GB APサーバ ①session情報の削減 ②LBから切り離し 最新化可能
  4. CMS / HotSpot • Concurrent Mark Sweep Garbage Collection •

    世代別GC • 一時停止の短縮が優先される • MinorGC:New領域対象。早い。断片化しない。 • MajorGC:Old領域対象。一部アプリケーション止める。 • Old領域は、compactionがないため断片化する。 • Initial markとremark(final mark)でアプリケーション停止 • MajorGC時にメモリ溢れになるとSTW(Stop The World)
  5. G1GC / HotSpot • Garbage First Garbage Collection • 世代別GC

    • ヒープ領域をリージョンという細かい単位で管理する • 目標停止時間を守ってコレクションを実施 • ガーベッジ率の高そうなヒープに対して実施 • YoungGC、MixedGC、FullGCの3種類 – YoungGC:Eden,Surviver領域対象 – MixedGC:Young領域 + Old領域対象
  6. ZingGC / Zing • Azul Systems社( https://www.azul.com/ )が提供しているJVM • 独自のC4(Continuously

    Concurrent Compacting Collector)を使用 • pauseless garbage collection = Non Stop The World • New GenerationとOld Generationの両方でcompactionをconcurrentに実行 し、STWなし • チューニング不要
  7. • OpenJDKにて開発中のGC( http://openjdk.java.net/projects/shenandoah/ ) • compactionもconcurrentに実施 • アプリケーション停止が少ない “Shenandoah is

    an ultra-low pause time garbage collector that reduces GC pause times by performing more garbage collection work concurrently with the running Java program. CMS and G1 both perform concurrent marking of live objects. Shenandoah adds concurrent compaction” • initial markとfinal markではpauseする • 停止時間はヒープのサイズによらず、100GBでも2GBでも変わらない • ヒープ領域をリージョンという細かい単位で管理する shenandoahGC / OpenJDK