fix output
This commit is contained in:
parent
9700f279ab
commit
38ceaecc59
42
nohang
42
nohang
@ -1,14 +1,16 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Nohang - The No Hang Daemon for Linux
|
# A daemon that prevents out of memory
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import signal
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from time import sleep, time
|
from time import sleep, time
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from sys import stdout
|
from sys import stdout
|
||||||
|
|
||||||
sig_dict = {9: 'SIGKILL', 15: 'SIGTERM'}
|
sig_dict = {signal.SIGKILL: 'SIGKILL',
|
||||||
|
signal.SIGTERM: 'SIGTERM'}
|
||||||
|
|
||||||
# directory where the script is running
|
# directory where the script is running
|
||||||
cd = os.getcwd()
|
cd = os.getcwd()
|
||||||
@ -329,7 +331,7 @@ def find_victim_and_send_signal(signal):
|
|||||||
|
|
||||||
success_time = time()
|
success_time = time()
|
||||||
delta_success = success_time - time0
|
delta_success = success_time - time0
|
||||||
send_result = ' Signal received; response time: {} ms'.format(round(delta_success * 1000))
|
send_result = 'signal received; response time: {} ms'.format(round(delta_success * 1000))
|
||||||
|
|
||||||
if gui_notifications:
|
if gui_notifications:
|
||||||
send_notify(signal, name, pid, oom_score, vm_rss, vm_swap)
|
send_notify(signal, name, pid, oom_score, vm_rss, vm_swap)
|
||||||
@ -337,23 +339,22 @@ def find_victim_and_send_signal(signal):
|
|||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
success_time = time()
|
success_time = time()
|
||||||
delta_success = success_time - time0
|
delta_success = success_time - time0
|
||||||
send_result = ' No such process; response time: {} ms'.format(round(delta_success * 1000))
|
send_result = 'no such process; response time: {} ms'.format(round(delta_success * 1000))
|
||||||
except ProcessLookupError:
|
except ProcessLookupError:
|
||||||
success_time = time()
|
success_time = time()
|
||||||
delta_success = success_time - time0
|
delta_success = success_time - time0
|
||||||
send_result = ' No such process; response time: {} ms'.format(round(delta_success * 1000))
|
send_result = 'no such process; response time: {} ms'.format(round(delta_success * 1000))
|
||||||
|
|
||||||
try_to_send = ' \033[1mPreventing OOM:\033[0m trying to send the \033[1m{}\033[0m signal to \033[1m{}\033[0m,\n Pid: {}, Badness: {}, VmRSS: {} MiB, VmSwap: {} MiB'.format(sig_dict[signal], name, pid, oom_score, vm_rss, vm_swap)
|
preventing_oom_message = ' Finding the process with the highest badness\n Victim is {}, pid: {}, badness: {}, VmRSS: {} MiB, VmSwap: {} MiB\n Sending {} to the victim; {}'.format(name, pid, oom_score, vm_rss, vm_swap, sig_dict[signal], send_result)
|
||||||
|
|
||||||
# print(try_to_send)
|
print(preventing_oom_message)
|
||||||
# print(send_result)
|
|
||||||
print('{}\n{}'.format(try_to_send, send_result))
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
success_time = time()
|
success_time = time()
|
||||||
delta_success = success_time - time0
|
delta_success = success_time - time0
|
||||||
|
|
||||||
|
# delta_success -> response_time
|
||||||
|
|
||||||
badness_is_too_small = ' oom_score {} < min_badness {}; response time: {} ms'.format(
|
badness_is_too_small = ' oom_score {} < min_badness {}; response time: {} ms'.format(
|
||||||
oom_score, min_badness, round(delta_success * 1000))
|
oom_score, min_badness, round(delta_success * 1000))
|
||||||
@ -458,7 +459,7 @@ else:
|
|||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
|
||||||
print('The path to the config file to be used:', config)
|
print('The path to the config:', config)
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
@ -1342,6 +1343,8 @@ while True:
|
|||||||
swap_sigterm_pc = '-'
|
swap_sigterm_pc = '-'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# проверка превышения порогов
|
# проверка превышения порогов
|
||||||
# порог превышен - пытаемся предотвратить OOM
|
# порог превышен - пытаемся предотвратить OOM
|
||||||
# пороги не превышены - спим
|
# пороги не превышены - спим
|
||||||
@ -1350,7 +1353,7 @@ while True:
|
|||||||
if mem_available <= mem_min_sigkill_kb and swap_free <= swap_min_sigkill_kb:
|
if mem_available <= mem_min_sigkill_kb and swap_free <= swap_min_sigkill_kb:
|
||||||
time0 = time()
|
time0 = time()
|
||||||
|
|
||||||
mem_info = '\033[1mTRIGGERED:\033[0m\n MemAvailable ({} MiB, {} %) < mem_min_sigkill ({} MiB, {} %)\n Swa' \
|
mem_info = 'TRIGGERED!\n MemAvailable ({} MiB, {} %) < mem_min_sigkill ({} MiB, {} %)\n Swa' \
|
||||||
'pFree ({} MiB, {} %) < swap_min_sigkill ({} MiB, {} %)'.format(
|
'pFree ({} MiB, {} %) < swap_min_sigkill ({} MiB, {} %)'.format(
|
||||||
kib_to_mib(mem_available),
|
kib_to_mib(mem_available),
|
||||||
percent(mem_available / mem_total),
|
percent(mem_available / mem_total),
|
||||||
@ -1364,25 +1367,26 @@ while True:
|
|||||||
kib_to_mib(swap_min_sigkill_kb),
|
kib_to_mib(swap_min_sigkill_kb),
|
||||||
swap_sigkill_pc)
|
swap_sigkill_pc)
|
||||||
|
|
||||||
find_victim_and_send_signal(9)
|
find_victim_and_send_signal(signal.SIGKILL)
|
||||||
|
|
||||||
# ZRAM KILL
|
# ZRAM KILL
|
||||||
elif mem_used_zram >= zram_max_sigkill_kb:
|
elif mem_used_zram >= zram_max_sigkill_kb:
|
||||||
time0 = time()
|
time0 = time()
|
||||||
|
|
||||||
mem_info = '\033[1mTRIGGERED:\033[0m\n MemUsedZram ({} MiB, {} %) > zram_max_sigkill ({} MiB, {} %)'.format(
|
mem_info = 'TRIGGERED!\n MemUsedZram ({} MiB, {} %) > zram_max_sigkill ({} MiB, {} %)'.format(
|
||||||
kib_to_mib(mem_used_zram),
|
kib_to_mib(mem_used_zram),
|
||||||
percent(mem_used_zram / mem_total),
|
percent(mem_used_zram / mem_total),
|
||||||
kib_to_mib(zram_max_sigkill_kb),
|
kib_to_mib(zram_max_sigkill_kb),
|
||||||
percent(zram_max_sigkill_kb / mem_total))
|
percent(zram_max_sigkill_kb / mem_total))
|
||||||
|
|
||||||
find_victim_and_send_signal(9)
|
find_victim_and_send_signal(signal.SIGKILL)
|
||||||
|
|
||||||
# MEM SWAP TERM
|
# MEM SWAP TERM
|
||||||
elif mem_available <= mem_min_sigterm_kb and swap_free <= swap_min_sigterm_kb:
|
elif mem_available <= mem_min_sigterm_kb and swap_free <= swap_min_sigterm_kb:
|
||||||
|
|
||||||
time0 = time()
|
time0 = time()
|
||||||
|
|
||||||
mem_info = '\033[1mTRIGGERED:\033[0m\n MemAvailable ({} MiB, {} %) < mem_min_sigterm ({} MiB, {} %)\n Sw' \
|
mem_info = 'TRIGGERED!\n MemAvailable ({} MiB, {} %) < mem_min_sigterm ({} MiB, {} %)\n Sw' \
|
||||||
'apFree ({} MiB, {} %) < swap_min_sigterm ({} MiB, {} %)'.format(
|
'apFree ({} MiB, {} %) < swap_min_sigterm ({} MiB, {} %)'.format(
|
||||||
kib_to_mib(mem_available),
|
kib_to_mib(mem_available),
|
||||||
percent(mem_available / mem_total),
|
percent(mem_available / mem_total),
|
||||||
@ -1401,20 +1405,20 @@ while True:
|
|||||||
kib_to_mib(swap_min_sigterm_kb),
|
kib_to_mib(swap_min_sigterm_kb),
|
||||||
swap_sigterm_pc)
|
swap_sigterm_pc)
|
||||||
|
|
||||||
find_victim_and_send_signal(15)
|
find_victim_and_send_signal(signal.SIGTERM)
|
||||||
|
|
||||||
# ZRAM TERM
|
# ZRAM TERM
|
||||||
elif mem_used_zram >= zram_max_sigterm_kb:
|
elif mem_used_zram >= zram_max_sigterm_kb:
|
||||||
time0 = time()
|
time0 = time()
|
||||||
|
|
||||||
mem_info = '\033[1mTRIGGERED:\033[0m\n MemUsedZram ({} MiB, {} %) > zram_max_sigter' \
|
mem_info = 'TRIGGERED!\n MemUsedZram ({} MiB, {} %) > zram_max_sigter' \
|
||||||
'm ({} M, {} %)'.format(
|
'm ({} M, {} %)'.format(
|
||||||
kib_to_mib(mem_used_zram),
|
kib_to_mib(mem_used_zram),
|
||||||
percent(mem_used_zram / mem_total),
|
percent(mem_used_zram / mem_total),
|
||||||
kib_to_mib(zram_max_sigterm_kb),
|
kib_to_mib(zram_max_sigterm_kb),
|
||||||
percent(zram_max_sigterm_kb / mem_total))
|
percent(zram_max_sigterm_kb / mem_total))
|
||||||
|
|
||||||
find_victim_and_send_signal(15)
|
find_victim_and_send_signal(signal.SIGTERM)
|
||||||
|
|
||||||
# LOW MEMORY WARNINGS
|
# LOW MEMORY WARNINGS
|
||||||
elif gui_low_memory_warnings and gui_notifications:
|
elif gui_low_memory_warnings and gui_notifications:
|
||||||
@ -1433,5 +1437,3 @@ while True:
|
|||||||
else:
|
else:
|
||||||
stdout.flush()
|
stdout.flush()
|
||||||
sleep_after_check_mem()
|
sleep_after_check_mem()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user