update oom-sort (small fix)

This commit is contained in:
Alexey Avramov 2020-04-05 16:49:35 +09:00
parent 5e67ec9ec3
commit dab381b62c

View File

@ -8,64 +8,44 @@ from operator import itemgetter
from os import listdir from os import listdir
from argparse import ArgumentParser from argparse import ArgumentParser
##########################################################################
# define funtcions
def pid_to_oom_score(pid): def pid_to_oom_score(pid):
with open('/proc/' + pid + '/oom_score') as f: with open('/proc/{}/oom_score'.format(pid), 'rb', buffering=0) as f:
return f.readline()[:-1] return int(f.read())
def pid_to_oom_score_adj(pid): def pid_to_oom_score_adj(pid):
with open('/proc/' + pid + '/oom_score_adj') as f: with open('/proc/{}/oom_score_adj'.format(pid), 'rb', buffering=0) as f:
return f.readline()[:-1] return int(f.read())
def pid_to_cmdline(pid): def pid_to_cmdline(pid):
""" with open('/proc/{}/cmdline'.format(pid), 'rb', buffering=0) as f:
Get process cmdline by pid. return f.read().decode('utf-8', 'ignore').replace(
'\x00', ' ').rstrip()
pid: str pid of required process
returns string cmdline
"""
with open('/proc/' + pid + '/cmdline') as f:
return f.read().replace('\x00', ' ').rstrip()
def pid_to_status_units(pid): def pid_to_status_units(pid):
with open('/proc/{}/status'.format(pid), 'rb', buffering=0) as f:
with open('/proc/' + pid + '/status', 'rb') as f:
f_list = f.read().decode('utf-8', 'ignore').split('\n') f_list = f.read().decode('utf-8', 'ignore').split('\n')
for i in range(len(f_list)): for i in range(len(f_list)):
if i == 1: if i == 1:
name = f_list[0].split('\t')[1] name = f_list[0].split('\t')[1]
if i == uid_index: if i == uid_index:
uid = f_list[i].split('\t')[2] uid = f_list[i].split('\t')[2]
if i == vm_rss_index: if i == vm_rss_index:
vm_rss = f_list[i].split('\t')[1][:-3] vm_rss = f_list[i].split('\t')[1][:-3]
if i == vm_swap_index: if i == vm_swap_index:
vm_swap = f_list[i].split('\t')[1][:-3] vm_swap = f_list[i].split('\t')[1][:-3]
return name, uid, vm_rss, vm_swap return name, uid, vm_rss, vm_swap
def get_max_pid_len(): def get_max_pid_len():
with open('/proc/sys/kernel/pid_max') as file: with open('/proc/sys/kernel/pid_max') as f:
for line in file: for line in f:
return len(line.strip()) return len(line.strip())
##########################################################################
sort_dict = { sort_dict = {
'PID': 0, 'PID': 0,
'oom_score': 1, 'oom_score': 1,
@ -78,13 +58,6 @@ sort_dict = {
} }
##########################################################################
# parse CLI args
# @TODO: user input validation
parser = ArgumentParser() parser = ArgumentParser()
parser.add_argument( parser.add_argument(
@ -129,8 +102,6 @@ if sort_by not in sort_dict:
exit() exit()
##########################################################################
# find VmRSS, VmSwap and UID positions in /proc/*/status for further # find VmRSS, VmSwap and UID positions in /proc/*/status for further
# searching positions of UID, VmRSS and VmSwap in each process # searching positions of UID, VmRSS and VmSwap in each process
@ -146,8 +117,6 @@ vm_rss_index = status_names.index('VmRSS')
vm_swap_index = status_names.index('VmSwap') vm_swap_index = status_names.index('VmSwap')
##########################################################################
# get sorted list with pid, oom_score, oom_score_adj, cmdline # get sorted list with pid, oom_score, oom_score_adj, cmdline
# get status units: name, uid, rss, swap # get status units: name, uid, rss, swap
@ -191,8 +160,6 @@ oom_list_sorted = sorted(
oom_list, key=itemgetter(int(sort_dict[sort_by])), reverse=True) oom_list, key=itemgetter(int(sort_dict[sort_by])), reverse=True)
##########################################################################
# find width of columns # find width of columns
@ -204,15 +171,12 @@ max_uid_len = len(str(sorted(
max_vm_rss_len = len(str(round( max_vm_rss_len = len(str(round(
sorted(oom_list, key=itemgetter(6), reverse=True)[0][6] / 1024.0))) sorted(oom_list, key=itemgetter(6), reverse=True)[0][6] / 1024)))
if max_vm_rss_len < 5: if max_vm_rss_len < 5:
max_vm_rss_len = 5 max_vm_rss_len = 5
##########################################################################
# print output # print output
if display_cmdline == 0: if display_cmdline == 0: