2012-12-04 18 views

risposta

8

In base a your comment, il problema potrebbe essere che non si sta utilizzando il numero di porta corretto.

Se si utilizza un server http presso http://localhost:9997, allora penso che si desidera eseguire il comando con http://localhost:9997:

$ go tool pprof http://localhost:9997/debug/pprof/heap 

Secondo il net/http/pprof pkg doc page, se l'applicazione è già in esecuzione un server HTTP non lo fai è necessario avviare uno e solo bisogno di includere il import _ "net/http/pprof" da qualche parte nel vostro programma. http://localhost:6060 è il server avviato come esempio e l'host e la porta sono arbitrari.

import _ "net/http/pprof" significa che il pacchetto è stato importato ma non si utilizza nessuno dei suoi identificatori esportati. Secondo lo go language spec, questo importerà il pacchetto esclusivamente per i suoi effetti collaterali. Questi effetti collaterali riguardano, credo, l'esecuzione dello init() functions definito nel package's source files e, apparentemente, registered variables.

Inoltre, si potrebbe trovare questo post utile:

http://blog.golang.org/2011/06/profiling-go-programs.html

1

Cosa "non funziona" significa? Cosa è previsto e cosa si osserva invece?

Run

$ go tool pprof -h 

a consultare la Guida per la versione di questo strumento. La mia versione locale non è in punta né al momento del rilascio (cioè in mezzo). Essa mostra:

(10:16) [email protected]:~$ go tool pprof -h 
Option h is ambiguous (heapcheck, help) 
Invalid option(s) 

Usage: 
pprof [options] <program> <profiles> 
    <profiles> is a space separated list of profile names. 
pprof [options] <symbolized-profiles> 
    <symbolized-profiles> is a list of profile files where each file contains 
    the necessary symbol mappings as well as profile data (likely generated 
    with --raw). 
pprof [options] <profile> 
    <profile> is a remote form. Symbols are obtained from host:port/pprof/symbol 

    Each name can be: 
    /path/to/profile  - a path to a profile file 
    host:port[/<service>] - a location of a service to get profile from 

    The /<service> can be /pprof/heap, /pprof/profile, /pprof/pmuprofile, 
         /pprof/growth, /pprof/contention, /pprof/wall, 
         /pprof/thread, or /pprof/filteredprofile. 
    For instance: 
    pprof http://myserver.com:80/pprof/heap 
    If /<service> is omitted, the service defaults to /pprof/profile (cpu profiling). 
pprof --symbols <program> 
    Maps addresses to symbol names. In this mode, stdin should be a 
    list of library mappings, in the same format as is found in the heap- 
    and cpu-profile files (this loosely matches that of /proc/self/maps 
    on linux), followed by a list of hex addresses to map, one per line. 

    For more help with querying remote servers, including how to add the 
    necessary server-side support code, see this filename (or one like it): 

    /usr/doc/google-perftools-1.5/pprof_remote_servers.html 

Options: 
    --cum    Sort by cumulative data 
    --base=<base>  Subtract <base> from <profile> before display 
    --interactive  Run in interactive mode (interactive "help" gives help) [default] 
    --seconds=<n>  Length of time for dynamic profiles [default=30 secs] 
    --add_lib=<file> Read additional symbols and line info from the given library 
    --lib_prefix=<dir> Comma separated list of library path prefixes 

Reporting Granularity: 
    --addresses   Report at address level 
    --lines    Report at source line level 
    --functions   Report at function level [default] 
    --files    Report at source file level 

Output type: 
    --text    Generate text report 
    --callgrind   Generate callgrind format to stdout 
    --gv    Generate Postscript and display 
    --web    Generate SVG and display 
    --list=<regexp>  Generate source listing of matching routines 
    --disasm=<regexp> Generate disassembly of matching routines 
    --symbols   Print demangled symbol names found at given addresses 
    --dot    Generate DOT file to stdout 
    --ps    Generate Postcript to stdout 
    --pdf    Generate PDF to stdout 
    --svg    Generate SVG to stdout 
    --gif    Generate GIF to stdout 
    --raw    Generate symbolized pprof data (useful with remote fetch) 

Heap-Profile Options: 
    --inuse_space  Display in-use (mega)bytes [default] 
    --inuse_objects  Display in-use objects 
    --alloc_space  Display allocated (mega)bytes 
    --alloc_objects  Display allocated objects 
    --show_bytes  Display space in bytes 
    --drop_negative  Ignore negative differences 

Contention-profile options: 
    --total_delay  Display total delay at each region [default] 
    --contentions  Display number of delays at each region 
    --mean_delay  Display mean delay at each region 

Call-graph Options: 
    --nodecount=<n>  Show at most so many nodes [default=80] 
    --nodefraction=<f> Hide nodes below <f>*total [default=.005] 
    --edgefraction=<f> Hide edges below <f>*total [default=.001] 
    --focus=<regexp> Focus on nodes matching <regexp> 
    --ignore=<regexp> Ignore nodes matching <regexp> 
    --scale=<n>   Set GV scaling [default=0] 
    --heapcheck   Make nodes with non-0 object counts 
         (i.e. direct leak generators) more visible 

Miscellaneous: 
    --tools=<prefix> Prefix for object tool pathnames 
    --test    Run unit tests 
    --help    This message 
    --version   Version information 

Environment Variables: 
    PPROF_TMPDIR  Profiles directory. Defaults to $HOME/pprof 
    PPROF_TOOLS   Prefix for object tools pathnames 

Examples: 

pprof /bin/ls ls.prof 
         Enters "interactive" mode 
pprof --text /bin/ls ls.prof 
         Outputs one line per procedure 
pprof --web /bin/ls ls.prof 
         Displays annotated call-graph in web browser 
pprof --gv /bin/ls ls.prof 
         Displays annotated call-graph via 'gv' 
pprof --gv --focus=Mutex /bin/ls ls.prof 
         Restricts to code paths including a .*Mutex.* entry 
pprof --gv --focus=Mutex --ignore=string /bin/ls ls.prof 
         Code paths including Mutex but not string 
pprof --list=getdir /bin/ls ls.prof 
         (Per-line) annotated source listing for getdir() 
pprof --disasm=getdir /bin/ls ls.prof 
         (Per-PC) annotated disassembly for getdir() 

pprof http://localhost:1234/ 
         Enters "interactive" mode 
pprof --text localhost:1234 
         Outputs one line per procedure for localhost:1234 
pprof --raw localhost:1234 > ./local.raw 
pprof --text ./local.raw 
         Fetches a remote profile for later analysis and then 
         analyzes it in text mode. 

FATAL ERROR: Invalid option(s) 
go tool pprof: exit status 1 
(10:16) [email protected]:~$ 

Sulla seconda domanda: Il `import _ "foo"' idioma è l'importazione pacchetto foo solo per gli effetti collaterali di inizializzazione di foo. Ciò potrebbe includere, ad esempio, la funzionalità di registrazione fornita da foo per essere utilizzabile all'interno di altri pacchetti. Un esempio concreto di questo è il formato di immagine specifico handling packages (vedere in fondo a "Sottodirectory") e il pacchetto astratto image.

+3

Ho un server API scritto da Go, e voglio ottimizzarlo. Quando avvio il server ascoltando 'localhost: 9997', come posso usare pprof? Io uso il comando 'go tool pprof http: // localhost: 6060/debug/pprof/heap', ma ho ottenuto' go tool pprof http: // localhost: 6060/debug/pprof/heap Leggi http: // localhost: 6060/debug/pprof/symbol Uso del valore non inizializzato in sostituzione (s ///) in/usr/local/go/pkg/tool/linux_amd64/pprof line 2957. http: // localhost: 6060/debug/pprof/simbolo non esiste go tool pprof: exit status 1' – Codefor