google / goexpect

Expect for Go
BSD 3-Clause "New" or "Revised" License
759 stars 134 forks source link

Possible memory leak because of Ticker. #3

Closed marek5050 closed 7 years ago

marek5050 commented 7 years ago

https://github.com/google/goexpect/blob/028ffe4adb97de831e58069dd82ed5ac85222e16/expect.go#L621

Hello, After running expect a couple of thousand times it seems there's a memory leak that occurs. I think I've traced it down to the referenced lines and reading through the NewTicker comments they recommend:

// The duration d must be greater than zero; if not, NewTicker will panic.
// Stop the ticker to release associated resources.

I couldn't find the code to stop the Ticker within expect.go. Is there a reason there's no Stop()?

defer chTicker.Stop()

Heap pprof profile without Stop

68.93MB of 68.93MB total (  100%)
Dropped 52 nodes (cum <= 0.34MB)
      flat  flat%   sum%        cum   cum%
      46MB 66.74% 66.74%       46MB 66.74%  runtime.makechan
   11.50MB 16.68% 83.42%    45.85MB 66.51%  time.NewTicker
       4MB  5.80% 89.22%    18.50MB 26.84%  time.NewTimer
    2.85MB  4.13% 93.35%     2.85MB  4.13%  runtime.addtimerLocked
    0.88MB  1.28% 94.63%     0.88MB  1.28%  compress/flate.NewWriter
    0.64MB  0.92% 95.55%     0.64MB  0.92%  github.com/golang/glog.(*syncBuffer).rotateFile

Heap pprof profile with Stop

18236.91kB of 18236.91kB total (  100%)
Dropped 64 nodes (cum <= 91.18kB)
      flat  flat%   sum%        cum   cum%
 9728.73kB 53.35% 53.35%  9728.73kB 53.35%  runtime.makechan
 5632.34kB 30.88% 84.23% 15361.08kB 84.23%  time.NewTimer
 1121.44kB  6.15% 90.38%  1121.44kB  6.15%  runtime.addtimerLocked
  650.62kB  3.57% 93.95%   650.62kB  3.57%  github.com/golang/glog.(*syncBuffer).rotateFile
  591.75kB  3.24% 97.19%   591.75kB  3.24%  crypto/elliptic.initTable
  512.02kB  2.81%   100%   512.02kB  2.81%  vendor/golang_org/x/net/http2/hpack.addDecoderNode

Example code: https://github.com/marek5050/GoPprof/blob/master/src/github.com/marek5050/GoProfiling/cmd/lser/main.go

skalle commented 7 years ago

Hey marek5050.

Sorry for not noticing this until now .. Will have a look in a bit.

skalle commented 7 years ago

Hey marek5050..

Thx. for finding/fixing that one! ..