最近用golang開發(fā)了一個socket服務端,主要邏輯就是接收客戶端發(fā)來的數(shù)據(jù)解析后存入opentsdb中,但是跑一段時間后發(fā)現(xiàn)內(nèi)存就會增長,而且不會被gc回收,初步判定是由于大量make[]byte導致內(nèi)存不釋放,代碼如下,求高人解惑?funcStartTCP()error{tcp_addr,_:=net.ResolveTCPAddr("tcp4",tcp_listen)listener,err:=net.ListenTCP("tcp4",tcp_addr)iferr!=nil{returnerr}deferlistener.Close()log.Info("starttcplistenon%s",tcp_listen)for{conn,err:=listener.AcceptTCP()iferr!=nil{log.Error("accepterror%s",err.Error())continue}log.Info("newsessioncreate%s",conn.RemoteAddr().String())goHandlerConn(conn)}}funcReadPacket(conn*net.TCPConn)[]byte{head:=make([]byte,4)_,err:=io.ReadFull(conn,head)iferr!=nil{returnnil}size:=binary.BigEndian.Uint32(head)data:=make([]byte,size)_,err=io.ReadFull(conn,data)iferr!=nil{returnnil}returndata}funcHandlerConn(conn*net.TCPConn){addr:=conn.RemoteAddr().String()deferfunc(){iferr:=conn.Close();err!=nil{log.Error("closesessionerror%s",err.Error())}else{log.Info("sessionclosed%s",addr)}}()for{data:=ReadPacket(conn)iflen(data)==0{log.Warn("emptydata")return}goHandlerMsg(conn,data,t)}}附pprof信息(pprof)top9.92GBof9.93GBtotal(100%)Dropped359nodes(cum
go語言服務端內(nèi)存持續(xù)增長,求解惑!
瀟瀟雨雨
2019-04-19 16:11:09