do not shoot if MemAvailable > mem_threshold

This commit is contained in:
Alexey Avramov 2020-02-01 03:38:00 +09:00
parent e8ea4af3a6
commit bc1bb3c0ea

View File

@ -1909,10 +1909,26 @@ def check_zram_ex():
return None, None, mem_used_zram
def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0):
def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0,
mem_available):
"""
"""
if mem_available <= hard_threshold_min_mem_kb:
ma_hard_threshold_exceded = True
else:
ma_hard_threshold_exceded = False
if mem_available <= soft_threshold_min_mem_kb:
ma_soft_threshold_exceded = True
else:
ma_soft_threshold_exceded = False
if mem_available <= warning_threshold_min_mem_kb:
ma_warning_threshold_exceded = True
else:
ma_warning_threshold_exceded = False
delta0 = monotonic() - x0
x0 = monotonic()
@ -1945,8 +1961,13 @@ def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0):
)
)
log('mem_avail_hard_threshold_exceded: {}\nmem_avail_soft_threshol'
'd_exceded: {}\nmem_avail_warning_threshold_exceeded {}'.format(
ma_hard_threshold_exceded, ma_soft_threshold_exceded,
ma_warning_threshold_exceded))
if (psi_kill_exceeded_timer >= psi_excess_duration and
psi_post_action_delay_exceeded):
psi_post_action_delay_exceeded and ma_hard_threshold_exceded):
mem_info = 'PSI avg ({}) > hard_threshold_max_psi ({})\n' \
'PSI avg exceeded psi_excess_duration (value' \
@ -1977,7 +1998,7 @@ def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0):
)
if (psi_term_exceeded_timer >= psi_excess_duration and
psi_post_action_delay_exceeded):
psi_post_action_delay_exceeded and ma_soft_threshold_exceded):
mem_info = 'PSI avg ({}) > soft_threshold_max_psi ({})\n' \
'PSI avg exceeded psi_excess_duration (value' \
@ -1993,7 +2014,8 @@ def check_psi_ex(psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0):
if low_memory_warnings_enabled:
if psi_avg_value >= warning_threshold_max_psi:
if (psi_avg_value >= warning_threshold_max_psi and
ma_warning_threshold_exceded):
return ('WARN', None, psi_t0, psi_kill_exceeded_timer,
psi_term_exceeded_timer, x0)
@ -2102,7 +2124,8 @@ def implement_corrective_action(
if CHECK_PSI:
(psi_threshold, psi_info, psi_t0, psi_kill_exceeded_timer,
psi_term_exceeded_timer, x0) = check_psi_ex(
psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0)
psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0,
mem_available)
if (masf_threshold is SIGKILL or zram_threshold is SIGKILL or
psi_threshold is SIGKILL):
@ -2274,15 +2297,13 @@ def implement_corrective_action(
elif iva == 1:
if vwd and d > sensitivity_test_time + 10:
log("The victim doesn't respond on corrective action' \
' in {} sec".format(
round(d, 3)))
log('The victim doesn\'t respond on corrective action'
' in {} sec'.format(round(d, 3)))
break
if not vwd and d > sensitivity_test_time:
log("The victim doesn't respond on corrective actio' \
'n in {} sec".format(
round(d, 3)))
log('The victim doesn\'t respond on corrective action'
' in {} sec'.format(round(d, 3)))
break
elif iva == 2:
@ -3529,7 +3550,8 @@ while True:
if CHECK_PSI:
(psi_threshold, psi_info, psi_t0, psi_kill_exceeded_timer,
psi_term_exceeded_timer, x0) = check_psi_ex(
psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0)
psi_t0, psi_kill_exceeded_timer, psi_term_exceeded_timer, x0,
mem_available)
if print_mem_check_results: