खोज…


टिप्पणियों

प्रोफाइलिंग कार्यक्रमों में अधिक के लिए, गो ब्लॉग पर जाएँ।

बेसिक सीपीयू और मेमोरी प्रोफाइलिंग

आप मुख्य कार्यक्रम में निम्नलिखित कोड जोड़ें।

var cpuprofile = flag.String("cpuprofile", "", "write cpu profile `file`")
var memprofile = flag.String("memprofile", "", "write memory profile to `file`")

func main() {
    flag.Parse()
    if *cpuprofile != "" {
        f, err := os.Create(*cpuprofile)
        if err != nil {
            log.Fatal("could not create CPU profile: ", err)
        }
        if err := pprof.StartCPUProfile(f); err != nil {
            log.Fatal("could not start CPU profile: ", err)
        }
        defer pprof.StopCPUProfile()
    }
    ...
    if *memprofile != "" {
        f, err := os.Create(*memprofile)
        if err != nil {
            log.Fatal("could not create memory profile: ", err)
        }
        runtime.GC() // get up-to-date statistics
        if err := pprof.WriteHeapProfile(f); err != nil {
            log.Fatal("could not write memory profile: ", err)
        }
        f.Close()
    }
}

कि बिल्ड जाने कार्यक्रम यदि मुख्य में जोड़ा के बाद go build main.go । कोड main.exe -cpuprofile cpu.prof -memprof mem.prof में परिभाषित झंडे के साथ मुख्य कार्यक्रम चलाएं। यदि परीक्षण मामलों के लिए प्रोफाइलिंग की जाती है, तो परीक्षण एक ही झंडे के साथ go test -cpuprofile cpu.prof -memprofile mem.prof

बेसिक मेमोरी प्रोफाइलिंग

var memprofile = flag.String("memprofile", "", "write memory profile to `file`")

func main() {
    flag.Parse()
    if *memprofile != "" {
        f, err := os.Create(*memprofile)
        if err != nil {
            log.Fatal("could not create memory profile: ", err)
        }
        runtime.GC() // get up-to-date statistics
        if err := pprof.WriteHeapProfile(f); err != nil {
            log.Fatal("could not write memory profile: ", err)
        }
        f.Close()
    }
}
go build main.go
main.exe -memprofile mem.prof
go tool pprof main.exe mem.prof

सीपीयू / ब्लॉक प्रोफाइल रेट सेट करें

// Sets the CPU profiling rate to hz samples per second
// If hz <= 0, SetCPUProfileRate turns off profiling
runtime.SetCPUProfileRate(hz) 

// Controls the fraction of goroutine blocking events that are reported in the blocking profile
// Rate = 1 includes every blocking event in the profile
// Rate <= 0 turns off profiling
runtime.SetBlockProfileRate(rate)

प्रोफ़ाइल बनाने के लिए बेंचमार्क का उपयोग करना

एक गैर-मुख्य पैकेज के साथ-साथ कोड के अंदर झंडे जोड़ने के बजाय , उदाहरण के लिए, परीक्षण पैकेज में बेंचमार्क लिखें:

func BenchmarkHello(b *testing.B) {
    for i := 0; i < b.N; i++ {
        fmt.Sprintf("hello")
    }
}

फिर प्रोफ़ाइल ध्वज के साथ परीक्षण चलाएँ

go test -cpuprofile cpu.prof -bench =।

और बेंचमार्क चलाया जाएगा और फ़ाइल नाम cpu.prof (उपरोक्त उदाहरण में) के साथ एक प्रोफ फ़ाइल बनाई जाएगी।

प्रोफ़ाइल फ़ाइल तक पहुँचना

एक बार एक प्रोफ फ़ाइल उत्पन्न हो जाने के बाद, कोई गो टूल का उपयोग करके प्रो फाइल को एक्सेस कर सकता है:

go tool pprof cpu.prof

यह profile खोज के लिए कमांड लाइन इंटरफेस में प्रवेश करेगा

सामान्य आदेशों में शामिल हैं:

(pprof) top

स्मृति में शीर्ष प्रक्रियाओं को सूचीबद्ध करता है

(pprof) peek

सभी प्रक्रियाओं को सूचीबद्ध करता है, संकीर्ण खोज में रेगेक्स का उपयोग करता है।

(pprof) web

प्रक्रिया का एक ग्राफ (svg प्रारूप में) खोलता है।

top आदेश का एक उदाहरण:

69.29s of 100.84s total (68.71%)
Dropped 176 nodes (cum <= 0.50s)
Showing top 10 nodes out of 73 (cum >= 12.03s)
      flat  flat%   sum%        cum   cum%
    12.44s 12.34% 12.34%     27.87s 27.64%  runtime.mapaccess1
    10.94s 10.85% 23.19%     10.94s 10.85%  runtime.duffcopy
     9.45s  9.37% 32.56%     54.61s 54.16%  github.com/tester/test.(*Circle).Draw
     8.88s  8.81% 41.36%      8.88s  8.81%  runtime.aeshashbody
     7.90s  7.83% 49.20%     11.04s 10.95%  runtime.mapaccess1_fast64
     5.86s  5.81% 55.01%      9.59s  9.51%  github.com/tester/test.(*Circle).isCircle
     5.03s  4.99% 60.00%      8.89s  8.82%  github.com/tester/test.(*Circle).openCircle
     3.14s  3.11% 63.11%      3.14s  3.11%  runtime.aeshash64
     3.08s  3.05% 66.16%      7.85s  7.78%  runtime.mallocgc
     2.57s  2.55% 68.71%     12.03s 11.93%  runtime.memhash


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow