[~] Refactor

This commit is contained in:
Siarhei Siniak 2023-08-01 15:07:18 +03:00
parent 68a5c158a4
commit bfa8be5356

@ -518,7 +518,7 @@ def eternal_oom(argv):
r'([^\s]+)\s*$', r'([^\s]+)\s*$',
]) ])
def oom_get_processes(): def oom_get_processes(extra_filter=None,):
with io.BytesIO( with io.BytesIO(
subprocess.check_output( subprocess.check_output(
'ps -e -o pid,rss,user,%cpu', 'ps -e -o pid,rss,user,%cpu',
@ -560,11 +560,15 @@ def eternal_oom(argv):
assert set(t6.keys()) == set(['PID', 'COMMAND']) assert set(t6.keys()) == set(['PID', 'COMMAND'])
t11 = pandas_merge(t1, t6, on='PID') t11 = pandas_merge(t1, t6, on='PID')
if extra_filter is None:
extra_filter = lambda *args : True
t7 = pandas_filter_values( t7 = pandas_filter_values(
t11, t11,
lambda row: \ lambda row: \
row['PID_x'] != self_pid and \ row['PID_x'] != self_pid and \
not 'freelancer' in row['COMMAND_y'] not 'freelancer' in row['COMMAND_y'] and \
extra_filter(row)
) )
t8 = pandas_sort_values( t8 = pandas_sort_values(
@ -691,10 +695,13 @@ def eternal_oom(argv):
def oom_mean_cpu(): def oom_mean_cpu():
return sum(last_total_cpu) / (len(last_total_cpu) + 1e-8) return sum(last_total_cpu) / (len(last_total_cpu) + 1e-8)
def oom_cpu_high(): def oom_cpu_high(cpu_limit=None):
if cpu_limit is None:
cpu_limit = options.cpu_limit
nonlocal last_cpu_high nonlocal last_cpu_high
if oom_mean_cpu() > options.cpu_limit: if oom_mean_cpu() > cpu_limit:
if last_cpu_high is None: if last_cpu_high is None:
last_cpu_high = datetime.datetime.now().timestamp() last_cpu_high = datetime.datetime.now().timestamp()
@ -705,10 +712,28 @@ def eternal_oom(argv):
return False return False
mem_used = None
def oom_mem_high(memory_limit=None):
nonlocal mem_used
if memory_limit is None:
memory_limit = options.memory_limit
return mem_used > options.memory_limit
while True: while True:
mem_used = memory_stats()['mem_used'] mem_used = memory_stats()['mem_used']
t11 = oom_get_processes() if not oom_mem_high(options.memory_limit / 2):
extra_filters = lambda row: (
'chrome' in row['COMMAND_y'] and '--type=renderer' in row['COMMAND_y']
or not 'chrome' in row['COMMAND_y']
)
else:
extra_filters = None
t11 = oom_get_processes(extra_filters)
oom_add_cpu(t11['total_cpu']) oom_add_cpu(t11['total_cpu'])
@ -717,11 +742,9 @@ def eternal_oom(argv):
t9 = t8 t9 = t8
t4 = lambda : oom_kill(t9['PID_x'][0]) t4 = lambda : oom_kill(t9['PID_x'][0])
t10 = lambda : mem_used > options.memory_limit
oom_status() oom_status()
if t10(): if oom_mem_high():
print('\n', end='') print('\n', end='')
pprint.pprint([ pprint.pprint([
'Killing [OOM]', 'Killing [OOM]',