fix check conf; add re cwd; add nssid info
This commit is contained in:
parent
14d0708c45
commit
c12d23535a
212
nohang
212
nohang
@ -383,6 +383,12 @@ def check_config():
|
|||||||
|
|
||||||
log('\n7.3. ')
|
log('\n7.3. ')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
log('7.3.1. Matching process names with RE patterns')
|
log('7.3.1. Matching process names with RE patterns')
|
||||||
if len(badness_adj_re_name_list) > 0:
|
if len(badness_adj_re_name_list) > 0:
|
||||||
log(' regexp: badness_adj:')
|
log(' regexp: badness_adj:')
|
||||||
@ -402,29 +408,57 @@ def check_config():
|
|||||||
log('7.3.3. Matching CGroup_v2-line with RE patterns')
|
log('7.3.3. Matching CGroup_v2-line with RE patterns')
|
||||||
if len(badness_adj_re_cgroup_v2_list) > 0:
|
if len(badness_adj_re_cgroup_v2_list) > 0:
|
||||||
log(' regexp: badness_adj:')
|
log(' regexp: badness_adj:')
|
||||||
for i in badness_adj_re_cgroup_v1_list:
|
for i in badness_adj_re_cgroup_v2_list:
|
||||||
log(' {} {}'.format(i[1], i[0]))
|
log(' {} {}'.format(i[1], i[0]))
|
||||||
else:
|
else:
|
||||||
log(' (not set)')
|
log(' (not set)')
|
||||||
|
|
||||||
log('7.3.4. Matching eUIDs with RE patterns')
|
log('7.3.4. Matching eUIDs with RE patterns')
|
||||||
if len(badness_adj_re_cgroup_v2_list) > 0:
|
if len(badness_adj_re_uid_list) > 0:
|
||||||
log(' regexp: badness_adj:')
|
log(' regexp: badness_adj:')
|
||||||
for i in badness_adj_re_uid_list:
|
for i in badness_adj_re_uid_list:
|
||||||
log(' {} {}'.format(i[1], i[0]))
|
log(' {} {}'.format(i[1], i[0]))
|
||||||
else:
|
else:
|
||||||
log(' (not set)')
|
log(' (not set)')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
log('7.3.5. Matching realpath with RE patterns')
|
log('7.3.5. Matching realpath with RE patterns')
|
||||||
if len(badness_adj_re_cgroup_v2_list) > 0:
|
if len(badness_adj_re_realpath_list) > 0:
|
||||||
log(' regexp: badness_adj:')
|
log(' regexp: badness_adj:')
|
||||||
for i in badness_adj_re_realpath_list:
|
for i in badness_adj_re_realpath_list:
|
||||||
log(' {} {}'.format(i[1], i[0]))
|
log(' {} {}'.format(i[1], i[0]))
|
||||||
else:
|
else:
|
||||||
log(' (not set)')
|
log(' (not set)')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log('7.3.5.1. Matching cwd with RE patterns')
|
||||||
|
if len(badness_adj_re_cwd_list) > 0:
|
||||||
|
log(' regexp: badness_adj:')
|
||||||
|
for i in badness_adj_re_cwd_list:
|
||||||
|
log(' {} {}'.format(i[1], i[0]))
|
||||||
|
else:
|
||||||
|
log(' (not set)')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
log('7.3.6. Matching cmdlines with RE patterns')
|
log('7.3.6. Matching cmdlines with RE patterns')
|
||||||
if len(badness_adj_re_cgroup_v2_list) > 0:
|
if len(badness_adj_re_cmdline_list) > 0:
|
||||||
log(' regexp: badness_adj:')
|
log(' regexp: badness_adj:')
|
||||||
for i in badness_adj_re_cmdline_list:
|
for i in badness_adj_re_cmdline_list:
|
||||||
log(' {} {}'.format(i[1], i[0]))
|
log(' {} {}'.format(i[1], i[0]))
|
||||||
@ -432,13 +466,24 @@ def check_config():
|
|||||||
log(' (not set)')
|
log(' (not set)')
|
||||||
|
|
||||||
log('7.3.7. Matching environ with RE patterns')
|
log('7.3.7. Matching environ with RE patterns')
|
||||||
if len(badness_adj_re_cgroup_v2_list) > 0:
|
if len(badness_adj_re_environ_list) > 0:
|
||||||
log(' regexp: badness_adj:')
|
log(' regexp: badness_adj:')
|
||||||
for i in badness_adj_re_environ_list:
|
for i in badness_adj_re_environ_list:
|
||||||
log(' {} {}'.format(i[1], i[0]))
|
log(' {} {}'.format(i[1], i[0]))
|
||||||
else:
|
else:
|
||||||
log(' (not set)')
|
log(' (not set)')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
log('\n8. Customize corrective actions')
|
log('\n8. Customize corrective actions')
|
||||||
|
|
||||||
if len(soft_actions_list) > 0:
|
if len(soft_actions_list) > 0:
|
||||||
@ -690,6 +735,34 @@ def pid_to_starttime(pid):
|
|||||||
return float(starttime) / SC_CLK_TCK
|
return float(starttime) / SC_CLK_TCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def pid_to_nssid(pid):
|
||||||
|
""" handle FNF error!
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
nssid = rline1('/proc/' + pid + '/stat').rpartition(')')[
|
||||||
|
2].split(' ')[4]
|
||||||
|
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
with open('/proc/' + pid + '/stat', 'rb') as f:
|
||||||
|
nssid = f.read().decode('utf-8', 'ignore').rpartition(
|
||||||
|
')')[2].split(' ')[4]
|
||||||
|
|
||||||
|
return nssid
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_victim_id(pid):
|
def get_victim_id(pid):
|
||||||
"""victim_id is starttime + pid"""
|
"""victim_id is starttime + pid"""
|
||||||
try:
|
try:
|
||||||
@ -808,6 +881,25 @@ def pid_to_realpath(pid):
|
|||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
def pid_to_cwd(pid):
|
||||||
|
"""
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return os.path.realpath('/proc/' + pid + '/cwd')
|
||||||
|
except FileNotFoundError:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def pid_to_uid(pid):
|
def pid_to_uid(pid):
|
||||||
"""return euid"""
|
"""return euid"""
|
||||||
try:
|
try:
|
||||||
@ -860,6 +952,18 @@ def pid_to_badness(pid):
|
|||||||
if search(re_tup[1], realpath) is not None:
|
if search(re_tup[1], realpath) is not None:
|
||||||
badness += int(re_tup[0])
|
badness += int(re_tup[0])
|
||||||
|
|
||||||
|
|
||||||
|
if re_match_cwd:
|
||||||
|
cwd = pid_to_cwd(pid)
|
||||||
|
for re_tup in badness_adj_re_cwd_list:
|
||||||
|
if search(re_tup[1], cwd) is not None:
|
||||||
|
badness += int(re_tup[0])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if re_match_cmdline:
|
if re_match_cmdline:
|
||||||
cmdline = pid_to_cmdline(pid)
|
cmdline = pid_to_cmdline(pid)
|
||||||
for re_tup in badness_adj_re_cmdline_list:
|
for re_tup in badness_adj_re_cmdline_list:
|
||||||
@ -1343,6 +1447,14 @@ def find_victim(_print_proc_table):
|
|||||||
elif extra_table_info == 'realpath':
|
elif extra_table_info == 'realpath':
|
||||||
extra_table_title = 'realpath'
|
extra_table_title = 'realpath'
|
||||||
|
|
||||||
|
|
||||||
|
elif extra_table_info == 'cwd':
|
||||||
|
extra_table_title = 'cwd'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
extra_table_title = ''
|
extra_table_title = ''
|
||||||
|
|
||||||
@ -1394,9 +1506,26 @@ def find_victim(_print_proc_table):
|
|||||||
elif extra_table_info == 'realpath':
|
elif extra_table_info == 'realpath':
|
||||||
extra_table_line = pid_to_realpath(pid)
|
extra_table_line = pid_to_realpath(pid)
|
||||||
|
|
||||||
|
elif extra_table_info == 'cwd':
|
||||||
|
extra_table_line = pid_to_cwd(pid)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
extra_table_line = ''
|
extra_table_line = ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# nssid = pid_to_nssid(pid)
|
||||||
|
# nn = pid_to_name(nssid)
|
||||||
|
# extra_table_line = '{} ({})'.format(nssid, nn)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
log('#{} {} {} {} {} {} {} {} {} {} {} {}'.format(
|
log('#{} {} {} {} {} {} {} {} {} {} {} {}'.format(
|
||||||
pid.rjust(7),
|
pid.rjust(7),
|
||||||
ppid.rjust(7),
|
ppid.rjust(7),
|
||||||
@ -1594,6 +1723,11 @@ def find_victim_info(pid, victim_badness, name):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
realpath = os.path.realpath('/proc/' + pid + '/exe')
|
realpath = os.path.realpath('/proc/' + pid + '/exe')
|
||||||
|
|
||||||
|
cwd = os.path.realpath('/proc/' + pid + '/cwd')
|
||||||
|
|
||||||
|
nssid = pid_to_nssid(pid)
|
||||||
|
|
||||||
victim_lifetime = format_time(uptime() - pid_to_starttime(pid))
|
victim_lifetime = format_time(uptime() - pid_to_starttime(pid))
|
||||||
victim_cgroup_v1 = pid_to_cgroup_v1(pid)
|
victim_cgroup_v1 = pid_to_cgroup_v1(pid)
|
||||||
victim_cgroup_v2 = pid_to_cgroup_v2(pid)
|
victim_cgroup_v2 = pid_to_cgroup_v2(pid)
|
||||||
@ -1637,7 +1771,9 @@ def find_victim_info(pid, victim_badness, name):
|
|||||||
'\n VmSwap: {} MiB' \
|
'\n VmSwap: {} MiB' \
|
||||||
'\n CGroup_v1: {}' \
|
'\n CGroup_v1: {}' \
|
||||||
'\n CGroup_v2: {}' \
|
'\n CGroup_v2: {}' \
|
||||||
|
'\n NSsid: {} ({})' \
|
||||||
'\n Realpath: {}' \
|
'\n Realpath: {}' \
|
||||||
|
'\n Cwd: {}' \
|
||||||
'{}{}' \
|
'{}{}' \
|
||||||
'\n Lifetime: {}'.format(
|
'\n Lifetime: {}'.format(
|
||||||
round((monotonic() - status0) * 1000),
|
round((monotonic() - status0) * 1000),
|
||||||
@ -1655,7 +1791,9 @@ def find_victim_info(pid, victim_badness, name):
|
|||||||
str(vm_swap).rjust(len_vm),
|
str(vm_swap).rjust(len_vm),
|
||||||
victim_cgroup_v1,
|
victim_cgroup_v1,
|
||||||
victim_cgroup_v2,
|
victim_cgroup_v2,
|
||||||
|
nssid, pid_to_name(nssid),
|
||||||
realpath,
|
realpath,
|
||||||
|
cwd,
|
||||||
c1, cmdline,
|
c1, cmdline,
|
||||||
victim_lifetime)
|
victim_lifetime)
|
||||||
|
|
||||||
@ -1942,7 +2080,8 @@ def implement_corrective_action(
|
|||||||
zram_threshold,
|
zram_threshold,
|
||||||
zram_info,
|
zram_info,
|
||||||
psi_info):
|
psi_info):
|
||||||
""" great and terrible function
|
"""
|
||||||
|
Great and terrible function.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
|
log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
|
||||||
@ -2522,10 +2661,26 @@ separate_log = False # will be overwritten after parse config
|
|||||||
cgroup_v1_index, cgroup_v2_index = find_cgroup_indexes()
|
cgroup_v1_index, cgroup_v2_index = find_cgroup_indexes()
|
||||||
|
|
||||||
|
|
||||||
|
# del it
|
||||||
self_oom_score_adj_min = '-100'
|
self_oom_score_adj_min = '-100'
|
||||||
self_oom_score_adj_max = '-10'
|
self_oom_score_adj_max = '-10'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
write_self_oom_score_adj(self_oom_score_adj_min)
|
write_self_oom_score_adj(self_oom_score_adj_min)
|
||||||
|
|
||||||
|
|
||||||
@ -2644,6 +2799,12 @@ badness_adj_re_cgroup_v1_list = []
|
|||||||
badness_adj_re_cgroup_v2_list = []
|
badness_adj_re_cgroup_v2_list = []
|
||||||
badness_adj_re_realpath_list = []
|
badness_adj_re_realpath_list = []
|
||||||
|
|
||||||
|
badness_adj_re_cwd_list = []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
soft_actions_list = []
|
soft_actions_list = []
|
||||||
|
|
||||||
# separator for optional parameters (that starts with @)
|
# separator for optional parameters (that starts with @)
|
||||||
@ -2755,6 +2916,28 @@ try:
|
|||||||
valid_re(reg_exp)
|
valid_re(reg_exp)
|
||||||
badness_adj_re_realpath_list.append((badness_adj, reg_exp))
|
badness_adj_re_realpath_list.append((badness_adj, reg_exp))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if line.startswith('@BADNESS_ADJ_RE_CWD'):
|
||||||
|
a = line.partition('@BADNESS_ADJ_RE_CWD')[2].strip(
|
||||||
|
' \n').partition(opt_separator)
|
||||||
|
badness_adj = a[0].strip(' ')
|
||||||
|
reg_exp = a[2].strip(' ')
|
||||||
|
valid_re(reg_exp)
|
||||||
|
badness_adj_re_cwd_list.append((badness_adj, reg_exp))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if line.startswith('@BADNESS_ADJ_RE_ENVIRON'):
|
if line.startswith('@BADNESS_ADJ_RE_ENVIRON'):
|
||||||
a = line.partition('@BADNESS_ADJ_RE_ENVIRON')[2].strip(
|
a = line.partition('@BADNESS_ADJ_RE_ENVIRON')[2].strip(
|
||||||
' \n').partition(opt_separator)
|
' \n').partition(opt_separator)
|
||||||
@ -2811,6 +2994,21 @@ else:
|
|||||||
re_match_realpath = True
|
re_match_realpath = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if badness_adj_re_cwd_list == []:
|
||||||
|
re_match_cwd = False
|
||||||
|
else:
|
||||||
|
re_match_cwd = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if badness_adj_re_cgroup_v1_list == []:
|
if badness_adj_re_cgroup_v1_list == []:
|
||||||
re_match_cgroup_v1 = False
|
re_match_cgroup_v1 = False
|
||||||
else:
|
else:
|
||||||
@ -3185,7 +3383,7 @@ if 'extra_table_info' in config_dict:
|
|||||||
extra_table_info != 'cgroup_v2' and
|
extra_table_info != 'cgroup_v2' and
|
||||||
extra_table_info != 'cmdline' and
|
extra_table_info != 'cmdline' and
|
||||||
extra_table_info != 'environ' and
|
extra_table_info != 'environ' and
|
||||||
extra_table_info != 'realpath'):
|
extra_table_info != 'realpath' and extra_table_info != 'cwd'):
|
||||||
|
|
||||||
errprint('Invalid config: invalid extra_table_info value\nExit')
|
errprint('Invalid config: invalid extra_table_info value\nExit')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
@ -276,6 +276,10 @@ forbid_negative_badness = True
|
|||||||
|
|
||||||
@BADNESS_ADJ_RE_REALPATH 20 /// ^/usr/bin/foo
|
@BADNESS_ADJ_RE_REALPATH 20 /// ^/usr/bin/foo
|
||||||
|
|
||||||
|
7.3.5.1. Matching cwd with RE patterns
|
||||||
|
|
||||||
|
@BADNESS_ADJ_RE_CWD 200 /// ^/home/
|
||||||
|
|
||||||
7.3.6. Matching cmdlines with RE patterns
|
7.3.6. Matching cmdlines with RE patterns
|
||||||
|
|
||||||
A good option that allows fine adjustment.
|
A good option that allows fine adjustment.
|
||||||
@ -400,6 +404,7 @@ print_proc_table = False
|
|||||||
cgroup_v1
|
cgroup_v1
|
||||||
cgroup_v2
|
cgroup_v2
|
||||||
realpath
|
realpath
|
||||||
|
cwd
|
||||||
cmdline
|
cmdline
|
||||||
environ
|
environ
|
||||||
|
|
||||||
|
@ -273,6 +273,10 @@ forbid_negative_badness = True
|
|||||||
|
|
||||||
@BADNESS_ADJ_RE_REALPATH 20 /// ^/usr/bin/foo
|
@BADNESS_ADJ_RE_REALPATH 20 /// ^/usr/bin/foo
|
||||||
|
|
||||||
|
7.3.5.1. Matching cwd with RE patterns
|
||||||
|
|
||||||
|
@BADNESS_ADJ_RE_CWD 200 /// ^/home/
|
||||||
|
|
||||||
7.3.6. Matching cmdlines with RE patterns
|
7.3.6. Matching cmdlines with RE patterns
|
||||||
|
|
||||||
A good option that allows fine adjustment.
|
A good option that allows fine adjustment.
|
||||||
@ -397,6 +401,7 @@ print_proc_table = False
|
|||||||
cgroup_v1
|
cgroup_v1
|
||||||
cgroup_v2
|
cgroup_v2
|
||||||
realpath
|
realpath
|
||||||
|
cwd
|
||||||
cmdline
|
cmdline
|
||||||
environ
|
environ
|
||||||
|
|
||||||
|
@ -273,6 +273,10 @@ forbid_negative_badness = True
|
|||||||
|
|
||||||
@BADNESS_ADJ_RE_REALPATH 20 /// ^/usr/bin/foo
|
@BADNESS_ADJ_RE_REALPATH 20 /// ^/usr/bin/foo
|
||||||
|
|
||||||
|
7.3.5.1. Matching cwd with RE patterns
|
||||||
|
|
||||||
|
@BADNESS_ADJ_RE_CWD 20 /// ^/home/
|
||||||
|
|
||||||
7.3.6. Matching cmdlines with RE patterns
|
7.3.6. Matching cmdlines with RE patterns
|
||||||
|
|
||||||
@BADNESS_ADJ_RE_CMDLINE 2000 /// ^/bin/sleep
|
@BADNESS_ADJ_RE_CMDLINE 2000 /// ^/bin/sleep
|
||||||
@ -402,6 +406,7 @@ print_proc_table = True
|
|||||||
cgroup_v1
|
cgroup_v1
|
||||||
cgroup_v2
|
cgroup_v2
|
||||||
realpath
|
realpath
|
||||||
|
cwd
|
||||||
cmdline
|
cmdline
|
||||||
environ
|
environ
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user