Merge pull request #356 from ablagoev/optimize-net-connections

Optimize memory usage for net.Connections on Linux
tags/v2.17.04
shirou 8 years ago committed by GitHub
commit b066db40c7

@ -351,12 +351,13 @@ func ConnectionsPidMax(kind string, pid int32, max int) ([]ConnectionStat, error
} }
func statsFromInodes(root string, pid int32, tmap []netConnectionKindType, inodes map[string][]inodeMap) ([]ConnectionStat, error) { func statsFromInodes(root string, pid int32, tmap []netConnectionKindType, inodes map[string][]inodeMap) ([]ConnectionStat, error) {
dupCheckMap := make(map[connTmp]struct{}) dupCheckMap := make(map[string]struct{})
var ret []ConnectionStat var ret []ConnectionStat
var err error var err error
for _, t := range tmap { for _, t := range tmap {
var path string var path string
var connKey string
var ls []connTmp var ls []connTmp
path = fmt.Sprintf("%s/net/%s", root, t.filename) path = fmt.Sprintf("%s/net/%s", root, t.filename)
switch t.family { switch t.family {
@ -371,7 +372,11 @@ func statsFromInodes(root string, pid int32, tmap []netConnectionKindType, inode
return nil, err return nil, err
} }
for _, c := range ls { for _, c := range ls {
if _, ok := dupCheckMap[c]; ok { // Build TCP key to id the connection uniquely
// socket type, src ip, src port, dst ip, dst port and state should be enough
// to prevent duplications.
connKey = fmt.Sprintf("%s-%s:%d-%s:%d-%s", c.sockType, c.laddr.IP, c.laddr.Port, c.raddr.IP, c.raddr.Port, c.status)
if _, ok := dupCheckMap[connKey]; ok {
continue continue
} }
@ -395,7 +400,7 @@ func statsFromInodes(root string, pid int32, tmap []netConnectionKindType, inode
conn.Uids, _ = proc.getUids() conn.Uids, _ = proc.getUids()
ret = append(ret, conn) ret = append(ret, conn)
dupCheckMap[c] = struct{}{} dupCheckMap[connKey] = struct{}{}
} }
} }

Loading…
Cancel
Save