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

goleak で goroutine leak を検出する

kumatch
January 25, 2020

goleak で goroutine leak を検出する

kumatch

January 25, 2020
Tweet

More Decks by kumatch

Other Decks in Programming

Transcript

  1. gorou%ne leak • channel ΍ sync ύοέʔδͳͲΛ࢖ͬͨʮ଴ͪঢ়ଶʯͷ gorou/ne • ϓϩηε͕ଓ͘ݶΓ࢒Δ

    = memory leak • ଴ͪࣗମ͸ Go ϥϯλΠϜ͕ΑΖ͘͠΍Δ • CPU ফඅ͸ؾʹͳΒͳ͍
  2. gorou%ne leak ൃੜͷྫ 1 func Do(ctx context.Context, send chan int)

    chan int { 2 recv := make(chan int) 3 go func() { 4 for { 5 select { 6 case num := <-recv: 7 send <- num 8 case <-ctx.Done(): // if do not receive 9 return // if do not return 10 } 11 } 12 }() 13 return recv 14 }
  3. uber-go/goleak ͷ࢓૊Έ • ςετ࣮ߦޙʹ run&me.Stack ͰελοΫτϨʔεΛऔΔ • ͦͷதͷ͏ͪ goleak ͕

    gorou&ne Λআ֎ • ࣗ਎Λ࣮ߦ͍ͯ͠Δ gorou&ne ͱ͔ • ʮ࢒ͬͨ gorou&neʯ͸ɺऴΘͬͯͳ͍΍ͭͱͯ͠ѻ͍ग़ྗ
  4. ·ͱΊ • uber-go/goleak Λςετίʔυʹ࢖͑͹ gorou.ne leak Λݟͭ ͚ΒΕΔ • طଘίʔυΛม͑Δ͜ͱͳ͘

    TestMain() ʹҰߦॻ͚ͩ͘Ͱ ༗ޮ • ࣮ߦ݁Ռʹର͢Δݕग़ͷͨΊద੾ͳར༻ମܥͰςετίʔυΛ ॻ͘͜ͱ