Я пытался профилировать некоторые приложения golang, но у меня это не получалось, я следовал этим двум руководствам:
- http://blog.golang.org/profiling-go-programs
- http://saml.rilspace.org/profiling-and-creating-call-graphs-for-go-programs-with-go-tool-pprof.
Оба говорят, что после добавления нескольких строк кода в приложение вы должны выполнить свое приложение, я сделал это и получил следующее сообщение на экране:
2015/06/16 12:04:00 профиль: профилирование процессора включено, /var/folders/kg/4fxym1sn0bx02zl_2sdbmrhr9wjvqt/T/profile680799962/cpu.pprof
Итак, я понимаю, что выполняется профилирование, отправка информации в файл.
Но когда я вижу размер файла в любой тестируемой мной программе, он всегда равен 64 байтам.
Когда я пытаюсь открыть файл cpu.pprof с помощью pprof и выполняю команду «top10», я вижу, что в файле ничего нет:
("./fact" - мое приложение)
инструмент go pprof ./fact /var/folders/kg/4fxym1sn0bx02zl_2sdbmrhr9wjvqt/T/profile680799962/cpu.pprof
топ10 ->
(pprof) top10 0 из 0 всего (0%) фиксированная сумма% сумма% совокупная сумма%
Так что, когда я профилирую, похоже, что ничего не происходит.
Я тестировал его на Mac (этот пример) и в ubuntu с тремя разными программами.
Вы знаете, что я делаю не так?
Тогда пример программы очень прост, это код (очень простая факториальная программа, которую я беру из Интернета):
import "fmt"
import "github.com/davecheney/profile"
func fact(n int) int {
if n == 0 {
return 1
}
return n * fact(n-1)
}
func main() {
defer profile.Start(profile.CPUProfile).Stop()
fmt.Println(fact(30))
}
Спасибо, Фер
pprof
- это профилировщик выборки, и вы не делаете ничего, что можно было бы выполнить. Ваше приложение должно постоянно выполнять инструкции в течение некоторого значительного количества времени для накопления достаточного количества выборок (при использовании net / http / pprof время выборки по умолчанию составляет 30 секунд) - person JimB   schedule 16.06.2015