From 24c928aea2b398f40b6dc23cf7a91ab3421d802d Mon Sep 17 00:00:00 2001 From: Alexey Avramov Date: Tue, 12 Feb 2019 00:42:00 +0900 Subject: [PATCH] fix readme --- README.md | 10 +++++++--- nohang | 15 ++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5a7d6f9..7b7b628 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,12 @@ Nohang is a highly configurable daemon for Linux which is able to correctly prevent [out of memory](https://en.wikipedia.org/wiki/Out_of_memory) (OOM) and keep system responsiveness in low memory conditions. -![pic](https://i.imgur.com/Hq1JPMs.png) - ## What is the problem? OOM conditions may cause [freezes](https://en.wikipedia.org/wiki/Hang_(computing)), [livelocks](https://en.wikipedia.org/wiki/Deadlock#Livelock), drop [caches](https://en.wikipedia.org/wiki/Page_cache) and processes to be killed (via sending [SIGKILL](https://en.wikipedia.org/wiki/Signal_(IPC)#SIGKILL)) instead of trying to terminate them correctly (via sending [SIGTERM](https://en.wikipedia.org/wiki/Signal_(IPC)#SIGTERM) or takes other corrective action). Some applications may crash if it's impossible to allocate memory. +![pic](https://i.imgur.com/yS81KAY.png) + Here are the statements of some users: > "How do I prevent Linux from freezing when out of memory? @@ -27,7 +27,10 @@ Also look at [Why are low memory conditions handled so badly?](https://www.reddi - Use of [earlyoom](https://github.com/rfjakob/earlyoom). This is a simple and very lightweight OOM preventer written in C (the best choice for emedded and old servers). It has a minimum dependencies and can work with oldest kernels. - Use of [oomd](https://github.com/facebookincubator/oomd). This is a userspace OOM killer for linux systems whitten in C++ and developed by Facebook. Needs Linux 4.20+. -- Use of nohang (maybe this is a good choice for modern desktops and servers if you need fine tuning). +- Use of `nohang` (maybe this is a good choice for modern desktops and servers if you need fine tuning). + +![pic](https://i.imgur.com/Hq1JPMs.png) + The tools listed above may work at the same time on one computer. @@ -211,6 +214,7 @@ Please create [issues](https://github.com/hakavlad/nohang/issues). Use cases, fe - Add the ability to send any signal instead of SIGTERM for processes with certain names - Handle `UnicodeDecodeError` if victim name consists of many unicode characters - Improve user input validation + - Fix `mlockall()` using `MCL_ONFAULT` and lock all memory by default - [v0.1](https://github.com/hakavlad/nohang/releases/tag/v0.1), 2018-11-23 - 1st release diff --git a/nohang b/nohang index dde93ea..7a6288c 100755 --- a/nohang +++ b/nohang @@ -427,7 +427,7 @@ def send_notify_etc(pid, name, command): pid: str process pid """ title = 'Hang prevention' - body = 'Victim is process {} [{}]\nExecute the command:\n{}'.format( + body = 'Victim is process {}, {}\nExecute the command:\n{}'.format( name.replace('&', '*'), pid, command.replace('&', '*') @@ -691,8 +691,12 @@ def find_victim_and_send_signal(signal): len_vm = len(str(vm_size)) + try: + realpath = os.path.realpath('/proc/' + pid + '/exe') + except FileNotFoundError: + print('Victim died: /proc/{}/exe does not exists'.format(pid)) + - realpath = os.path.realpath('/proc/' + pid + '/exe') state = pid_to_state(pid) pname = pid_to_name(ppid.strip('\n ')) # print([ppid], [pname]) @@ -736,10 +740,9 @@ def find_victim_and_send_signal(signal): cmdline ) else: - - + # нахер такое ветвление - + victim_info = '\033[4mFound a process with highest badness:\033[0m' \ '\n Name: \033[33m{}\033[0m' \ '\n PID: \033[33m{}\033[0m' \ @@ -958,11 +961,13 @@ def calculate_percent(arg_key): ########################################################################## +# Lock all memory mlockall() +########################################################################## # find mem_total