Merge pull request #567 from tagirb/grouped_memorymaps

implement grouped memorymaps output
This commit is contained in:
shirou 2019-01-13 17:17:11 +09:00 committed by GitHub
commit a33a26bd97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 1 deletions

View File

@ -581,6 +581,9 @@ func (p *Process) MemoryMaps(grouped bool) (*[]MemoryMapsStat, error) {
func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) { func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]MemoryMapsStat, error) {
pid := p.Pid pid := p.Pid
var ret []MemoryMapsStat var ret []MemoryMapsStat
if grouped {
ret = make([]MemoryMapsStat, 1)
}
smapsPath := common.HostProc(strconv.Itoa(int(pid)), "smaps") smapsPath := common.HostProc(strconv.Itoa(int(pid)), "smaps")
contents, err := ioutil.ReadFile(smapsPath) contents, err := ioutil.ReadFile(smapsPath)
if err != nil { if err != nil {
@ -643,7 +646,20 @@ func (p *Process) MemoryMapsWithContext(ctx context.Context, grouped bool) (*[]M
if err != nil { if err != nil {
return &ret, err return &ret, err
} }
ret = append(ret, g) if grouped {
ret[0].Size += g.Size
ret[0].Rss += g.Rss
ret[0].Pss += g.Pss
ret[0].SharedClean += g.SharedClean
ret[0].SharedDirty += g.SharedDirty
ret[0].PrivateClean += g.PrivateClean
ret[0].PrivateDirty += g.PrivateDirty
ret[0].Referenced += g.Referenced
ret[0].Anonymous += g.Anonymous
ret[0].Swap += g.Swap
} else {
ret = append(ret, g)
}
} }
// starts new block // starts new block
blocks = make([]string, 16) blocks = make([]string, 16)

View File

@ -89,6 +89,7 @@ func Test_Process_memory_maps(t *testing.T) {
t.Errorf("error %v", err) t.Errorf("error %v", err)
} }
// ungrouped memory maps
mmaps, err := ret.MemoryMaps(false) mmaps, err := ret.MemoryMaps(false)
if err != nil { if err != nil {
t.Errorf("memory map get error %v", err) t.Errorf("memory map get error %v", err)
@ -99,6 +100,18 @@ func Test_Process_memory_maps(t *testing.T) {
t.Errorf("memory map get error %v", m) t.Errorf("memory map get error %v", m)
} }
} }
// grouped memory maps
mmaps, err = ret.MemoryMaps(true)
if err != nil {
t.Errorf("memory map get error %v", err)
}
if len(*mmaps) != 1 {
t.Errorf("grouped memory maps length (%v) is not equal to 1", len(*mmaps))
}
if (*mmaps)[0] == empty {
t.Errorf("memory map is empty")
}
} }
func Test_Process_MemoryInfo(t *testing.T) { func Test_Process_MemoryInfo(t *testing.T) {
p := testGetProcess() p := testGetProcess()