add column help
This commit is contained in:
parent
589c0de53f
commit
a7879677dd
1 changed files with 70 additions and 27 deletions
97
smem
97
smem
|
|
@ -200,16 +200,26 @@ def showpids():
|
||||||
return pidusername(p)
|
return pidusername(p)
|
||||||
|
|
||||||
fields = dict(
|
fields = dict(
|
||||||
pid=('PID', lambda n: n, '% 5s', lambda x: len(p)),
|
pid=('PID', lambda n: n, '% 5s', lambda x: len(p),
|
||||||
user=('User', showuser, '%-8s', lambda x: len(dict.fromkeys(x))),
|
'process ID'),
|
||||||
name=('Name', src.pidname, '%-24.24s', None),
|
user=('User', showuser, '%-8s', lambda x: len(dict.fromkeys(x)),
|
||||||
command=('Command', src.pidcmd, '%-27.27s', None),
|
'owner of process'),
|
||||||
maps=('Maps',lambda n: pt[n]['maps'], '% 5s', sum),
|
name=('Name', src.pidname, '%-24.24s', None,
|
||||||
swap=('Swap',lambda n: pt[n]['swap'], '% 8a', sum),
|
'name of process'),
|
||||||
uss=('USS', lambda n: pt[n]['uss'], '% 8a', sum),
|
command=('Command', src.pidcmd, '%-27.27s', None,
|
||||||
rss=('RSS', lambda n: pt[n]['rss'], '% 8a', sum),
|
'process command line'),
|
||||||
pss=('PSS', lambda n: pt[n]['pss'], '% 8a', sum),
|
maps=('Maps',lambda n: pt[n]['maps'], '% 5s', sum,
|
||||||
vss=('VSS', lambda n: pt[n]['size'], '% 8a', sum),
|
'total number of mappings'),
|
||||||
|
swap=('Swap',lambda n: pt[n]['swap'], '% 8a', sum,
|
||||||
|
'amount of swap space consumed (ignoring sharing)'),
|
||||||
|
uss=('USS', lambda n: pt[n]['uss'], '% 8a', sum,
|
||||||
|
'unique set size'),
|
||||||
|
rss=('RSS', lambda n: pt[n]['rss'], '% 8a', sum,
|
||||||
|
'resident set size (ignoring sharing)'),
|
||||||
|
pss=('PSS', lambda n: pt[n]['pss'], '% 8a', sum,
|
||||||
|
'proportional set size (including sharing)'),
|
||||||
|
vss=('VSS', lambda n: pt[n]['size'], '% 8a', sum,
|
||||||
|
'virtual set size (total virtual memory mapped)'),
|
||||||
)
|
)
|
||||||
columns = options.columns or 'pid user command swap uss pss rss'
|
columns = options.columns or 'pid user command swap uss pss rss'
|
||||||
|
|
||||||
|
|
@ -249,21 +259,32 @@ def showmaps():
|
||||||
pt = maptotals(p)
|
pt = maptotals(p)
|
||||||
|
|
||||||
fields = dict(
|
fields = dict(
|
||||||
map=('Map', lambda n: n, '%-40.40s', len),
|
map=('Map', lambda n: n, '%-40.40s', len,
|
||||||
count=('Count', lambda n: pt[n]['count'], '% 5s', sum),
|
'mapping name'),
|
||||||
pids=('PIDs', lambda n: pt[n]['pids'], '% 5s', sum),
|
count=('Count', lambda n: pt[n]['count'], '% 5s', sum,
|
||||||
swap=('Swap',lambda n: pt[n]['swap'], '% 8a', sum),
|
'number of mappings found'),
|
||||||
|
pids=('PIDs', lambda n: pt[n]['pids'], '% 5s', sum,
|
||||||
|
'number of PIDs using mapping'),
|
||||||
|
swap=('Swap',lambda n: pt[n]['swap'], '% 8a', sum,
|
||||||
|
'amount of swap space consumed (ignoring sharing)'),
|
||||||
uss=('USS', lambda n: pt[n]['private_clean']
|
uss=('USS', lambda n: pt[n]['private_clean']
|
||||||
+ pt[n]['private_dirty'], '% 8a', sum),
|
+ pt[n]['private_dirty'], '% 8a', sum,
|
||||||
rss=('RSS', lambda n: pt[n]['rss'], '% 8a', sum),
|
'unique set size'),
|
||||||
pss=('PSS', lambda n: pt[n]['pss'], '% 8a', sum),
|
rss=('RSS', lambda n: pt[n]['rss'], '% 8a', sum,
|
||||||
vss=('VSS', lambda n: pt[n]['size'], '% 8a', sum),
|
'resident set size (ignoring sharing)'),
|
||||||
|
pss=('PSS', lambda n: pt[n]['pss'], '% 8a', sum,
|
||||||
|
'proportional set size (including sharing)'),
|
||||||
|
vss=('VSS', lambda n: pt[n]['size'], '% 8a', sum,
|
||||||
|
'virtual set size (total virtual address space mapped)'),
|
||||||
avgpss=('AVGPSS', lambda n: int(1.0 * pt[n]['pss']/pt[n]['pids']),
|
avgpss=('AVGPSS', lambda n: int(1.0 * pt[n]['pss']/pt[n]['pids']),
|
||||||
'% 8a', sum),
|
'% 8a', sum,
|
||||||
|
'average PSS per PID'),
|
||||||
avguss=('AVGUSS', lambda n: int(1.0 * pt[n]['uss']/pt[n]['pids']),
|
avguss=('AVGUSS', lambda n: int(1.0 * pt[n]['uss']/pt[n]['pids']),
|
||||||
'% 8a', sum),
|
'% 8a', sum,
|
||||||
|
'average USS per PID'),
|
||||||
avgrss=('AVGRSS', lambda n: int(1.0 * pt[n]['rss']/pt[n]['pids']),
|
avgrss=('AVGRSS', lambda n: int(1.0 * pt[n]['rss']/pt[n]['pids']),
|
||||||
'% 8a', sum),
|
'% 8a', sum,
|
||||||
|
'average RSS per PID'),
|
||||||
)
|
)
|
||||||
columns = options.columns or 'map pids avgpss pss'
|
columns = options.columns or 'map pids avgpss pss'
|
||||||
|
|
||||||
|
|
@ -307,29 +328,51 @@ def showusers():
|
||||||
return username(u)
|
return username(u)
|
||||||
|
|
||||||
fields = dict(
|
fields = dict(
|
||||||
user=('User', showuser, '%-8s', None),
|
user=('User', showuser, '%-8s', None,
|
||||||
count=('Count', lambda n: pt[n]['count'], '% 5s', sum),
|
'user name or ID'),
|
||||||
swap=('Swap',lambda n: pt[n]['swap'], '% 8a', sum),
|
count=('Count', lambda n: pt[n]['count'], '% 5s', sum,
|
||||||
|
'number of processes'),
|
||||||
|
swap=('Swap',lambda n: pt[n]['swap'], '% 8a', sum,
|
||||||
|
'amount of swapspace consumed (ignoring sharing)'),
|
||||||
uss=('USS', lambda n: pt[n]['private_clean']
|
uss=('USS', lambda n: pt[n]['private_clean']
|
||||||
+ pt[n]['private_dirty'], '% 8a', sum),
|
+ pt[n]['private_dirty'], '% 8a', sum,
|
||||||
rss=('RSS', lambda n: pt[n]['rss'], '% 8a', sum),
|
'unique set size'),
|
||||||
pss=('PSS', lambda n: pt[n]['pss'], '% 8a', sum),
|
rss=('RSS', lambda n: pt[n]['rss'], '% 8a', sum,
|
||||||
|
'resident set size (ignoring sharing)'),
|
||||||
|
pss=('PSS', lambda n: pt[n]['pss'], '% 8a', sum,
|
||||||
|
'proportional set size (including sharing)'),
|
||||||
|
vss=('VSS', lambda n: pt[n]['pss'], '% 8a', sum,
|
||||||
|
'virtual set size (total virtual memory mapped)'),
|
||||||
)
|
)
|
||||||
columns = options.columns or 'user count swap uss pss rss'
|
columns = options.columns or 'user count swap uss pss rss'
|
||||||
|
|
||||||
showtable(pt.keys(), fields, columns.split(), options.sort or 'pss')
|
showtable(pt.keys(), fields, columns.split(), options.sort or 'pss')
|
||||||
|
|
||||||
|
def showfields(fields, f):
|
||||||
|
print "unknown field", f
|
||||||
|
print "known fields:"
|
||||||
|
for l in sorted(fields.keys()):
|
||||||
|
print "%-8s %s" % (l, fields[l][-1])
|
||||||
|
|
||||||
def showtable(rows, fields, columns, sort):
|
def showtable(rows, fields, columns, sort):
|
||||||
header = ""
|
header = ""
|
||||||
format = ""
|
format = ""
|
||||||
formatter = []
|
formatter = []
|
||||||
|
|
||||||
|
if sort not in fields:
|
||||||
|
showfields(fields, sort)
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
if options.pie:
|
if options.pie:
|
||||||
columns.append(options.pie)
|
columns.append(options.pie)
|
||||||
if options.bar:
|
if options.bar:
|
||||||
columns.append(options.bar)
|
columns.append(options.bar)
|
||||||
|
|
||||||
for n in columns:
|
for n in columns:
|
||||||
|
if n not in fields:
|
||||||
|
showfields(fields, n)
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
f = fields[n][2]
|
f = fields[n][2]
|
||||||
if 'a' in f:
|
if 'a' in f:
|
||||||
formatter.append(showamount)
|
formatter.append(showamount)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue