Hi all: I write a simpile HTTP proxy,and find the most alloctions appear in io.copyBuffer
(pprof) list io.copyBuffer > > Total: 2.80TB > > ROUTINE ======================== io.copyBuffer in >> /usr/local/go/src/io/io.go > > 1.03TB 2.47TB (flat, cum) 88.16% of Total > > . . 383: if wt, ok := src.(WriterTo); ok { > > . . 384: return wt.WriteTo(dst) > > . . 385: } > > . . 386: // Similarly, if the writer has a ReadFrom >> method, use it to do the copy. > > . . 387: if rt, ok := dst.(ReaderFrom); ok { > > . 3.02GB 388: return rt.ReadFrom(src) > > . . 389: } > > . . 390: if buf == nil { > > . . 391: size := 32 * 1024 > > . . 392: if l, ok := src.(*LimitedReader); >> ok && int64(size) > l.N { > > . . 393: if l.N < 1 { > > . . 394: size = 1 > > . . 395: } else { > > . . 396: size = int(l.N) > > . . 397: } > > . . 398: } > > 1.03TB 1.03TB 399: buf = make([]byte, size) > > . . 400: } > > . . 401: for { > > . 1.43TB 402: nr, er := src.Read(buf) > > . . 403: if nr > 0 { > > . 569.57MB 404: nw, ew := >> dst.Write(buf[0:nr]) > > . . 405: if nw > 0 { > > . . 406: written += >> int64(nw) > > . . 407: } > > . . 408: if ew != nil { > > . . 409: err = ew > > and this the stacktrace > 0: 0 [2057907: 67433496576] @ 0x470169 0x6e508a 0x6e5042 0x6e4ca7 0x6cf82e > 0x77bfe9 0x45f7a1 # 0x470168 io.copyBuffer+0x2a8 > /usr/local/go/src/io/io.go:399 # 0x6e5089 io.Copy+0x69 > /usr/local/go/src/io/io.go:364 # 0x6e5041 net/http.(*transferWriter).doBodyCopy+0x21 > /usr/local/go/src/net/http/transfer.go:400 # 0x6e4ca6 net/http.(*transferWriter).writeBody+0x426 > /usr/local/go/src/net/http/transfer.go:348 # 0x6cf82d net/http.(*Response).Write+0x42d > /usr/local/go/src/net/http/response.go:328 # 0x77bfe8 main.handler+0x318 > /root/ctrip/shendun/main.go:74 -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/323a00be-c0dc-4d22-8435-5ea9659b0f9e%40googlegroups.com.