Get maps view working
This commit is contained in:
parent
f411af9d30
commit
09d7939030
1 changed files with 52 additions and 25 deletions
77
smem
77
smem
|
|
@ -15,7 +15,7 @@ def pidmaps(pid):
|
||||||
else:
|
else:
|
||||||
start, end = f[0].split('-')
|
start, end = f[0].split('-')
|
||||||
start = int(start, 16)
|
start = int(start, 16)
|
||||||
name = ""
|
name = "<anonymous>"
|
||||||
if len(f) > 5:
|
if len(f) > 5:
|
||||||
name = f[5]
|
name = f[5]
|
||||||
maps[start] = dict(end=int(end, 16), mode=f[1],
|
maps[start] = dict(end=int(end, 16), mode=f[1],
|
||||||
|
|
@ -43,10 +43,6 @@ def processtotals(pids):
|
||||||
continue
|
continue
|
||||||
return totals
|
return totals
|
||||||
|
|
||||||
def maptotals():
|
|
||||||
t = dict(size=0, rss=0, pss=0, shared_clean=0, shared_dirty=0,
|
|
||||||
private_clean=0, private_dirty=0, referenced=0, swap=0)
|
|
||||||
|
|
||||||
def sortmaps(totals, key):
|
def sortmaps(totals, key):
|
||||||
l = []
|
l = []
|
||||||
for pid in totals:
|
for pid in totals:
|
||||||
|
|
@ -115,11 +111,6 @@ def showpids():
|
||||||
return piduser(p)
|
return piduser(p)
|
||||||
return username(piduser(p))
|
return username(piduser(p))
|
||||||
|
|
||||||
def showsize(field):
|
|
||||||
if numeric:
|
|
||||||
return lambda n: pt[n][field]
|
|
||||||
return lambda n: units(pt[n][field])
|
|
||||||
|
|
||||||
fields = dict(
|
fields = dict(
|
||||||
pid=('PID', lambda n: n, '% 5s', lambda x: len(p)),
|
pid=('PID', lambda n: n, '% 5s', lambda x: len(p)),
|
||||||
uid=('UID', username, '%-5s', None),
|
uid=('UID', username, '%-5s', None),
|
||||||
|
|
@ -136,6 +127,46 @@ def showpids():
|
||||||
|
|
||||||
showtable(p, fields, columns.split(), options.sort or 'pss')
|
showtable(p, fields, columns.split(), options.sort or 'pss')
|
||||||
|
|
||||||
|
def maptotals(pids):
|
||||||
|
totals = {}
|
||||||
|
for pid in pids:
|
||||||
|
try:
|
||||||
|
maps = pidmaps(pid)
|
||||||
|
for m in maps.iterkeys():
|
||||||
|
name = maps[m]['name']
|
||||||
|
if name not in totals:
|
||||||
|
t = dict(size=0, rss=0, pss=0, shared_clean=0,
|
||||||
|
shared_dirty=0, private_clean=0, count=0,
|
||||||
|
private_dirty=0, referenced=0, swap=0)
|
||||||
|
else:
|
||||||
|
t = totals[name]
|
||||||
|
|
||||||
|
for k in t:
|
||||||
|
t[k] += maps[m].get(k, 0)
|
||||||
|
t['count'] += 1
|
||||||
|
totals[name] = t
|
||||||
|
except:
|
||||||
|
raise
|
||||||
|
print len(totals), totals.keys()[0]
|
||||||
|
return totals
|
||||||
|
|
||||||
|
def showmaps():
|
||||||
|
p = pids()
|
||||||
|
pt = maptotals(p)
|
||||||
|
|
||||||
|
fields = dict(
|
||||||
|
map=('Map', lambda n: n, '%-24.24s', len),
|
||||||
|
count=('Count', lambda n: pt[n]['count'], '% 8s', sum),
|
||||||
|
swap=('Swap',lambda n: pt[n]['swap'], '% 8s', sum),
|
||||||
|
uss=('USS', lambda n: pt[n]['private_clean']
|
||||||
|
+ pt[n]['private_dirty'], '% 8s', sum),
|
||||||
|
rss=('RSS', lambda n: pt[n]['rss'], '% 8s', sum),
|
||||||
|
pss=('PSS', lambda n: pt[n]['pss'], '% 8s', sum),
|
||||||
|
)
|
||||||
|
columns = options.columns or 'map count swap uss pss rss'
|
||||||
|
|
||||||
|
showtable(pt.keys(), fields, columns.split(), options.sort or 'pss')
|
||||||
|
|
||||||
def showtable(rows, fields, columns, sort):
|
def showtable(rows, fields, columns, sort):
|
||||||
header = ""
|
header = ""
|
||||||
format = ""
|
format = ""
|
||||||
|
|
@ -170,29 +201,25 @@ def showtable(rows, fields, columns, sort):
|
||||||
print "-" * len(header)
|
print "-" * len(header)
|
||||||
print format % tuple(t)
|
print format % tuple(t)
|
||||||
|
|
||||||
# todo
|
|
||||||
# fix disappearing dirs
|
|
||||||
# show unknowns
|
|
||||||
|
|
||||||
# options
|
|
||||||
# columns
|
|
||||||
# numeric
|
|
||||||
# sort order
|
|
||||||
|
|
||||||
parser = optparse.OptionParser("%prog [options]")
|
parser = optparse.OptionParser("%prog [options]")
|
||||||
parser.add_option("-H", "--no-header", action="store_true",
|
parser.add_option("-H", "--no-header", action="store_true",
|
||||||
help="disable header line")
|
help="disable header line")
|
||||||
parser.add_option("-n", "--numeric", action="store_true",
|
parser.add_option("-n", "--numeric", action="store_true",
|
||||||
help="numeric output")
|
help="numeric output")
|
||||||
parser.add_option("-s", "--sort", type="str",
|
parser.add_option("-s", "--sort", type="str",
|
||||||
help="field to sort on")
|
help="field to sort on")
|
||||||
parser.add_option("-t", "--totals", action="store_true",
|
parser.add_option("-t", "--totals", action="store_true",
|
||||||
help="show totals")
|
help="show totals")
|
||||||
parser.add_option("-c", "--columns", type="str",
|
parser.add_option("-c", "--columns", type="str",
|
||||||
help="columns to show")
|
help="columns to show")
|
||||||
|
parser.add_option("-m", "--mappings", action="store_true",
|
||||||
|
help="show mappings")
|
||||||
|
|
||||||
defaults = {}
|
defaults = {}
|
||||||
parser.set_defaults(**defaults)
|
parser.set_defaults(**defaults)
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
showpids()
|
if options.mappings:
|
||||||
|
showmaps()
|
||||||
|
else:
|
||||||
|
showpids()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue