2016-02-19 2 views
1

Из timer.Stop() documentationТаймер накладных расходов вызывает переполнение памяти

Стоп предотвращает таймер от стрельбы. Он возвращает true, если вызов останавливает таймер, false, если таймер уже истек или остановлен. Стоп не закрывает канал, чтобы предотвратить неправильное чтение с канала .

мне нужно найти способ уничтожить объект таймера или канал, созданный в программе через After или NewTimer. Я не использую эти функции напрямую, а другую библиотеку, которая использует таймаут, используя эти функции. Чем больше запросов я обрабатываю память программы, тем больше увеличивается, а затем убивается.

Я посмотрел в следующих местах, но без особой помощи:

  1. https://groups.google.com/forum/#!topic/golang-nuts/A597Btr_0P8
  2. https://groups.google.com/forum/#!topic/golang-nuts/-xnFsH_ZRqU
  3. https://groups.google.com/forum/#!topic/golang-nuts/rYthykbCLHk
  4. https://groups.google.com/forum/#!topic/golang-nuts/hjioKxSJ3Tc

Пожалуйста, помогите, нужно исправить это отчаянно.

UPDATE

Подозреваемого код на https://github.com/gocql/gocql/blob/986e33a705412161497203d55d0669d04282f5ff/conn.go#L546

var timeoutCh <-chan time.Time 
if c.timeout > 0 { 
    timeoutCh = time.After(c.timeout) 
} 

select { 
case err := <-call.resp: 
    if err != nil { 
     if !c.Closed() { 
      // if the connection is closed then we cant release the stream, 
      // this is because the request is still outstanding and we have 
      // been handed another error from another stream which caused the 
      // connection to close. 
      c.releaseStream(stream) 
     } 
     return nil, err 
    } 
case <-timeoutCh: 
    close(call.timeout) 
    c.handleTimeout() 
    return nil, ErrTimeoutNoResponse 
case <-c.quit: 
    return nil, ErrConnectionClosed 
} 

Как я это знаю? Я побежал идти инструмент pprof захватить memprof и то, что он показал это:

section of memprof

+0

Можете ли вы предоставить код, который страдает от проблемы? –

+0

Итак, вы говорите, что ссылки на эти сотни тысяч каналов таймера не выходят за рамки, поэтому они не собирают мусор? –

+0

Привет всем Я добавил подозрительный код и вывод pprof memprofile на вопрос. – user568109

ответ

Смежные вопросы