Golang профилирует тесты appengine

Кажется, у меня есть утечка памяти, связанная с получением больших файлов и отправкой их в GCS. Попытка использовать pprof для профилирования использования памяти для моего кода appengine. Мои тесты используют appengine/aetest, и я могу вывести профиль памяти, но результаты, похоже, не показывают мне ничего полезного.

Сначала я сделал бенчмарк. Это очень медленная операция, поэтому она выполняется только один раз.

$ goapp test ./cloudstore -run=none -bench=. -memprofile=cloud.prof
BenchmarkLargeFile      1        54124706398 ns/op

$ go tool pprof --text cloudstore.test cloud.prof 
Adjusting heap profiles for 1-in-524288 sampling rate
Total: 0.5 MB
     0.5 100.0% 100.0%      0.5 100.0% runtime.newG
     0.0   0.0% 100.0%      0.5 100.0% allocg
     0.0   0.0% 100.0%      0.5 100.0% mcommoninit
     0.0   0.0% 100.0%      0.5 100.0% runtime.malg
     0.0   0.0% 100.0%      0.5 100.0% runtime.mpreinit
     0.0   0.0% 100.0%      0.5 100.0% runtime.rt0_go
     0.0   0.0% 100.0%      0.5 100.0% runtime.schedinit

Ни один из моих вызовов функций не появляется, и эта цифра в 0,5 МБ явно неверна (я открываю файл размером 12 МБ и загружаю его). Как получить реальный профиль памяти?

$ go version
go version go1.3.1 linux/386
$ goapp version
go version go1.4.2 (appengine-1.9.25) linux/386

person tgreiser    schedule 12.11.2015    source источник


Ответы (1)


Углубившись в флаги тестирования, я нашел ответ. Мне понадобился memprofilerate=1 и alloc_space

$ goapp test ./cloudstore -memprofilerate=1 -run=none -bench=. -memprofile=cloud.prof
$ go tool pprof --text --alloc_space cloudstore.test cloud.prof
person tgreiser    schedule 12.11.2015