Created
December 29, 2015 14:47
-
-
Save direvius/f4b6fbecb4c99a8f12b1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(pprof) list HostClient.*do | |
Total: 6.13mins | |
ROUTINE ======================== github.com/valyala/fasthttp.(*HostClient).do in /home/direvius/.gvm/pkgsets/go1.5.2/global/src/github.com/valyala/fasthttp/client.go | |
200ms 1.60mins (flat, cum) 26.08% of Total | |
. . 795:func (c *HostClient) do(req *Request, resp *Response, newConn bool) (bool, error) { | |
. . 796: if req == nil { | |
. . 797: panic("BUG: req cannot be nil") | |
. . 798: } | |
. . 799: | |
20ms 140ms 800: atomic.StoreUint32(&c.lastUseTime, uint32(time.Now().Unix()-startTimeUnix)) | |
. . 801: | |
. 620ms 802: cc, err := c.acquireConn(newConn) | |
. . 803: if err != nil { | |
. . 804: return false, err | |
. . 805: } | |
20ms 20ms 806: conn := cc.c | |
. . 807: | |
. . 808: if c.WriteTimeout > 0 { | |
. . 809: if err = conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout)); err != nil { | |
. . 810: c.closeConn(cc) | |
. . 811: return false, err | |
. . 812: } | |
. . 813: } | |
. . 814: | |
. . 815: userAgentOld := req.Header.UserAgent() | |
. . 816: if len(userAgentOld) == 0 { | |
. . 817: req.Header.userAgent = c.getClientName() | |
. . 818: } | |
10ms 15.47s 819: bw := c.acquireWriter(conn) | |
10ms 1.63s 820: err = req.Write(bw) | |
. . 821: if len(userAgentOld) == 0 { | |
. . 822: req.Header.userAgent = userAgentOld | |
. . 823: } | |
. . 824: | |
. . 825: if err != nil { | |
. . 826: c.releaseWriter(bw) | |
. . 827: c.closeConn(cc) | |
. . 828: return false, err | |
. . 829: } | |
10ms 30.30s 830: if err = bw.Flush(); err != nil { | |
. . 831: c.releaseWriter(bw) | |
. . 832: c.closeConn(cc) | |
. . 833: return true, err | |
. . 834: } | |
. 100ms 835: c.releaseWriter(bw) | |
. . 836: | |
. . 837: nilResp := false | |
. . 838: if resp == nil { | |
. . 839: nilResp = true | |
. . 840: resp = AcquireResponse() | |
. . 841: } | |
. . 842: | |
. . 843: if c.ReadTimeout > 0 { | |
. . 844: if err = conn.SetReadDeadline(time.Now().Add(c.ReadTimeout)); err != nil { | |
. . 845: c.closeConn(cc) | |
. . 846: return false, err | |
. . 847: } | |
. . 848: } | |
. . 849: | |
50ms 28.68s 850: br := c.acquireReader(conn) | |
20ms 18s 851: if err = resp.ReadLimitBody(br, c.MaxResponseBodySize); err != nil { | |
. . 852: if nilResp { | |
. . 853: ReleaseResponse(resp) | |
. . 854: } | |
. . 855: c.releaseReader(br) | |
. . 856: c.closeConn(cc) | |
. . 857: if err == io.EOF { | |
. . 858: return true, err | |
. . 859: } | |
. . 860: return false, err | |
. . 861: } | |
30ms 610ms 862: c.releaseReader(br) | |
. . 863: | |
30ms 30ms 864: if req.Header.ConnectionClose() || resp.Header.ConnectionClose() { | |
. 240ms 865: c.closeConn(cc) | |
. . 866: } else { | |
. 160ms 867: c.releaseConn(cc) | |
. . 868: } | |
. . 869: | |
. . 870: if nilResp { | |
. . 871: ReleaseResponse(resp) | |
. . 872: } | |
(pprof) list acquireWriter | |
Total: 6.13mins | |
ROUTINE ======================== github.com/valyala/fasthttp.(*HostClient).acquireWriter in /home/direvius/.gvm/pkgsets/go1.5.2/global/src/github.com/valyala/fasthttp/client.go | |
110ms 15.46s (flat, cum) 4.20% of Total | |
. . 998: c.connsLock.Lock() | |
. . 999: c.conns = append(c.conns, cc) | |
. . 1000: c.connsLock.Unlock() | |
. . 1001:} | |
. . 1002: | |
20ms 20ms 1003:func (c *HostClient) acquireWriter(conn net.Conn) *bufio.Writer { | |
20ms 2.73s 1004: v := c.writerPool.Get() | |
10ms 10ms 1005: if v == nil { | |
. . 1006: n := c.WriteBufferSize | |
. . 1007: if n <= 0 { | |
. . 1008: n = defaultWriteBufferSize | |
. . 1009: } | |
60ms 12.70s 1010: return bufio.NewWriterSize(conn, n) | |
. . 1011: } | |
. . 1012: bw := v.(*bufio.Writer) | |
. . 1013: bw.Reset(conn) | |
. . 1014: return bw | |
. . 1015:} | |
(pprof) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment