You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "chengning (JIRA)" <ji...@apache.org> on 2017/02/23 09:28:44 UTC

[jira] [Updated] (THRIFT-4105) used too much memory randomly

     [ https://issues.apache.org/jira/browse/THRIFT-4105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

chengning updated THRIFT-4105:
------------------------------
    Attachment: pprof.txt

> used too much memory randomly
> -----------------------------
>
>                 Key: THRIFT-4105
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4105
>             Project: Thrift
>          Issue Type: Bug
>          Components: Go - Library
>            Reporter: chengning
>            Priority: Critical
>         Attachments: pprof.txt
>
>
> In my golang  project used thrift,  high memory usage once or twice a week.
> Use go tool pprof can find the following information.
> We did not use thrift to pass larger strings, but they allocate a string with the size of 352.20MB 
> I think there may be a problem
> (pprof) top
> 704.39MB of 709.32MB total (99.31%)
> Dropped 215 nodes (cum <= 3.55MB)
>       flat  flat%   sum%        cum   cum%
>   704.39MB 99.31% 99.31%   704.39MB 99.31%  git.apache.org/thrift.git/lib/go/thrift.(*TBinaryProtocol).readStringBody
>          0     0% 99.31%   704.39MB 99.31%  git.apache.org/thrift.git/lib/go/thrift.(*TBinaryProtocol).ReadMessageBegin
>          0     0% 99.31%   705.03MB 99.39%  git.apache.org/thrift.git/lib/go/thrift.(*TSimpleServer).AcceptLoop.func1
>          0     0% 99.31%   705.03MB 99.39%  git.apache.org/thrift.git/lib/go/thrift.(*TSimpleServer).processRequests
>          0     0% 99.31%   705.03MB 99.39%  letv.com/rpc_server/thrift.(*VideoCallThriftProcessor).Process
>          0     0% 99.31%   708.82MB 99.93%  runtime.goexit
> (pprof) list readStringBody
> Total: 709.32MB
> ROUTINE ======================== git.apache.org/thrift.git/lib/go/thrift.(*TBinaryProtocol).readStringBody in /letv/cloudim/letv-videocall-server/src/git.apache.org/thrift.git/lib/go/thrift/binary_protocol.go
>   704.39MB   704.39MB (flat, cum) 99.31% of Total
>          .          .    482:   }
>          .          .    483:   var buf []byte
>          .          .    484:   if int(size) <= len(p.buffer) {
>          .          .    485:           buf = p.buffer[0:size]
>          .          .    486:   } else {
>   352.20MB   352.20MB    487:           buf = make([]byte, size)
>          .          .    488:   }
>          .          .    489:   _, e := io.ReadFull(p.trans, buf)
>   352.20MB   352.20MB    490:   return string(buf), NewTProtocolException(e)
>          .          .    491:}
> (pprof) list ReadMessageBegin
> Total: 709.32MB
> ROUTINE ======================== git.apache.org/thrift.git/lib/go/thrift.(*TBinaryProtocol).ReadMessageBegin in /letv/cloudim/letv-videocall-server/src/git.apache.org/thrift.git/lib/go/thrift/binary_protocol.go
>          0   704.39MB (flat, cum) 99.31% of Total
>          .          .    256:           return name, typeId, seqId, nil
>          .          .    257:   }
>          .          .    258:   if p.strictRead {
>          .          .    259:           return name, typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, fmt.Errorf("Missing version in ReadMessageBegin"))
>          .          .    260:   }
>          .   704.39MB    261:   name, e2 := p.readStringBody(size)
>          .          .    262:   if e2 != nil {
>          .          .    263:           return name, typeId, seqId, e2
>          .          .    264:   }
>          .          .    265:   b, e3 := p.ReadByte()
>          .          .    266:   if e3 != nil {



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)