Rò rỉ trong Goroutine và tài nguyên gỡ lỗi

Tram Ho

Ví Dụ Đơn Giản

  • trong func doWork với parameter là một chan string.
  • func sẽ leak vì string channel là một giá trị nil. Có nghĩa là goroutine này không clear tài nguyên, không stop func.
  • ví dụ trên có lẽ là cực kì ngắn, nhưng trong thực tế thì func sẽ tồn tại trong lifetime và ảnh hưởng đến tài nguyên của chương trình.

Debug Resource

Cài package

  • cài package: apt-get install graphviz gv (debian) or brew install graphviz (mac)
  • cài pprof: go get -u github.com/google/pprof
  • import pprof: import _ "net/http/pprof"
  • add server: pprof

source

  • trong func main, gọi 3 hàm leak() -> trong lifetime sẽ có 3 goroutine bị leak
  • start server với port 1234
  • sau khi start server, mở một terminal khác go tool pprof http://localhost:1234/debug/pprof/goroutine và enter png
  • sẽ có kết quả Generating report in profile001.png
  • Kết quả trong hình sử dụng pprof thì sẽ có 3 leak.

Video
https://www.youtube.com/watch?v=e1Aa4d90nzk

Source
https://github.com/ducnpdev/open-dev/blob/master/concurrency/leak.go

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo