2012-12-04 40 views

Trả lời

8

Dựa trên your comment, vấn đề có thể là bạn không sử dụng đúng số cổng.

Nếu bạn đang chạy một máy chủ http tại http://localhost:9997, sau đó tôi nghĩ rằng bạn muốn chạy lệnh với http://localhost:9997:

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

Theo net/http/pprof pkg doc page, nếu ứng dụng của bạn đang chạy một máy chủ http bạn không cần phải bắt đầu một và chỉ cần bao gồm import _ "net/http/pprof" ở đâu đó trong chương trình của bạn. http://localhost:6060 là máy chủ bắt đầu làm ví dụ và máy chủ và cổng là tùy ý.

import _ "net/http/pprof" có nghĩa là gói được nhập nhưng bạn không sử dụng bất kỳ số nhận dạng đã xuất nào của nó. Theo số go language spec, điều này sẽ chỉ nhập gói cho các tác dụng phụ của nó. Những tác dụng phụ liên quan đến, tôi nghĩ rằng, việc thực hiện các init() functions được xác định trong package's source files và, rõ ràng, registered variables.

Ngoài ra, bạn có thể tìm thấy bài viết trên blog này có hữu ích:

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

1

Điều gì "không hoạt động" nghĩa là gì? Những gì được mong đợi và những gì được quan sát thay thế?

Run

$ go tool pprof -h 

để xem trợ giúp cho các phiên bản của công cụ này. Phiên bản cục bộ của tôi không phải là lúc không phát hành (tức là ở giữa). Nó hiển thị:

(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]:~$ 

Câu hỏi thứ hai: Thành ngữ `import _" foo "'chỉ nhập gói foo cho các tác dụng phụ của quá trình khởi tạo foo. Điều đó có thể bao gồm chức năng đăng ký mẫu được cung cấp bởi foo để có thể sử dụng được từ các gói khác. Một ví dụ cụ thể cho điều này là định dạng hình ảnh cụ thể handling packages (xem dưới cùng tại "Thư mục phụ") và gói trừu tượng image.

+3

Tôi có một API máy chủ được viết bởi Go, và tôi muốn tối ưu hóa nó. Khi tôi bắt đầu máy chủ nghe tại 'localhost: 9997', làm thế nào tôi có thể sử dụng pprof? Tôi sử dụng lệnh 'go tool pprof http: // localhost: 6060/debug/pprof/heap', nhưng có 'go tool pprof http: // localhost: 6060/debug/pprof/heap Đọc http: // localhost: 6060/debug/pprof/symbol Sử dụng giá trị uninitialized trong thay thế (s ///) tại/usr/local/go/pkg/công cụ/linux_amd64/dòng pprof 2957. http: // localhost: 6060/debug/pprof/symbol không tồn tại go pprof tool: exit status 1' – Codefor

Các vấn đề liên quan