Linux script to get most expensive processes
Cecil Westerhof
Cecil at decebal.nl
Tue Aug 4 16:19:31 EDT 2015
Under Linux I like to get the most expensive processes. The two most
useful commands are:
ps -eo pid,user,pcpu,args --sort=-pcpu
and:
ps -eo pid,user,pcpu,args --sort=-vsize
In my case I am only interested in the seven most expensive processes.
For this I wrote the following script.
========================================================================
#!/usr/bin/env python3
import subprocess
import sys
def give_output(param):
output = subprocess.check_output(([
'ps',
'--columns={0}' .format(max_line_length),
'-eo',
'pid,user,start_time,{0},args'.format(param),
'--sort=-{0}' .format(param)
])).splitlines()
for line in output[:no_of_lines]:
print(line.decode('utf-8'))
accepted_params = {
'pcpu',
'rss',
'size',
'time',
'vsize',
}
current_platform = sys.platform
max_line_length = 200
needed_platform = 'linux'
no_of_lines = 8 # One extra for the heading
if current_platform != needed_platform:
raise Exception('Needs a {0} platform, got {1} platform'.
format(needed_platform, current_platform))
no_of_parameters = len(sys.argv) - 1
if no_of_parameters == 0:
to_check = 'pcpu'
elif no_of_parameters == 1:
to_check = sys.argv[1]
else:
raise Exception('Too many arguments')
if (to_check != 'all') and not(to_check in accepted_params):
raise Exception('Used illegal parameter: {0}'.format(to_check))
if to_check == 'all':
for param in sorted(accepted_params):
give_output(param)
print()
else:
give_output(to_check)
========================================================================
Is this a reasonable way to do this? Getting the parameter is done
quit simple, but I did not think fancy was necessary here.
--
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof
More information about the Python-list
mailing list