FastNetMon

Sunday 27 July 2014

Профилирование приложений на Golang

К сожалению, сабж весьма скудно документирован, но при этом снабжен очень крутым набором инструментов! Основной источник: http://blog.golang.org/profiling-go-programs

Мы сейчас говорим исключительно о профайлинге по потреблению CPU. Для начала нужно добавить в программу следующее:
import "runtime/pprof"
import "flag"
import "log"
 Потом добавляем в функцию main в самом начале:
 flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal(err)
        }  
        pprof.StartCPUProfile(f)
        defer pprof.StopCPUProfile()
    }   
И запускаем программу со следующими аргументами:
./gordiff -cpuprofile=gordiff.prof
Запускаем профайлер:
go tool pprof gordiff gordiff.prof
Смотрим результаты введя в его терминале команду top10:
(pprof) top10
Total: 426 samples
     338  79.3%  79.3%      338  79.3% code.google.com/p/go.crypto/md4._Block
      57  13.4%  92.7%       57  13.4% main.faster_rollsum
      21   4.9%  97.7%       21   4.9% syscall.Syscall
      10   2.3% 100.0%       10   2.3% runtime.memmove
       0   0.0% 100.0%       21   4.9% System
       0   0.0% 100.0%       10   2.3% bufio.(*Reader).Read
       0   0.0% 100.0%      338  79.3% code.google.com/p/go.crypto/md4.(*digest).Write
       0   0.0% 100.0%      405  95.1% main.generate_signature
       0   0.0% 100.0%      405  95.1% main.main
       0   0.0% 100.0%      405  95.1% runtime.gosched0

 

No comments :

Post a Comment

Note: only a member of this blog may post a comment.