From 7d2c01b61fe112c6585c0adaebed7e69829c25c6 Mon Sep 17 00:00:00 2001 From: Alexey Avramov Date: Sun, 2 Dec 2018 19:49:58 +0900 Subject: [PATCH] install oom-trigger and mans --- Makefile | 4 ++ oom-sort.1 | 3 ++ oom-trigger | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++ oom-trigger.1 | 3 ++ 4 files changed, 134 insertions(+) create mode 100644 oom-sort.1 create mode 100755 oom-trigger create mode 100644 oom-trigger.1 diff --git a/Makefile b/Makefile index 0faa170..bc9a786 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,8 @@ install: install -d $(DESTDIR)/$(PREFIX)/usr/share/man/man1 gzip -k -c nohang.1 > $(DESTDIR)/$(PREFIX)/usr/share/man/man1/nohang.1.gz + gzip -k -c oom-sort.1 > $(DESTDIR)/$(PREFIX)/usr/share/man/man1/oom-sort.1.gz + gzip -k -c oom-trigger.1 > $(DESTDIR)/$(PREFIX)/usr/share/man/man1/oom-trigger.1.gz install -d $(DESTDIR)/$(PREFIX)/lib/systemd/system install -m0644 ./nohang.service $(DESTDIR)/$(PREFIX)/lib/systemd/system/nohang.service @@ -31,6 +33,8 @@ uninstall: rm -fv $(PREFIX)/usr/sbin/nohang_notify_low_mem rm -fv $(PREFIX)/usr/bin/oom-sort rm -fv $(PREFIX)/usr/share/man/man1/nohang.1.gz + rm -fv $(PREFIX)/usr/share/man/man1/oom-sort.1.gz + rm -fv $(PREFIX)/usr/share/man/man1/oom-trigger.1.gz rm -fv $(PREFIX)/lib/systemd/system/nohang.service rm -fvr $(PREFIX)/etc/nohang/ diff --git a/oom-sort.1 b/oom-sort.1 new file mode 100644 index 0000000..b1bdbd8 --- /dev/null +++ b/oom-sort.1 @@ -0,0 +1,3 @@ +.TH oom-sort 1 +.SH NAME +oom-sort \- sort processes by oom_score diff --git a/oom-trigger b/oom-trigger new file mode 100755 index 0000000..3c280c5 --- /dev/null +++ b/oom-trigger @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +""" +Interactive OOM trigger +""" + +import os + + +########################################################################## + + +# find mem_total +# find positions of SwapFree and SwapTotal in /proc/meminfo + +with open('/proc/meminfo') as file: + mem_list = file.readlines() + +mem_list_names = [] +for s in mem_list: + mem_list_names.append(s.split(':')[0]) + +if mem_list_names[2] != 'MemAvailable': + print('Your Linux kernel is too old, Linux 3.14+ requied\nExit') + exit() + +swap_total_index = mem_list_names.index('SwapTotal') +swap_free_index = swap_total_index + 1 + +mem_total = int(mem_list[0].split(':')[1].strip(' kB\n')) + +# Get names from /proc/*/status to be able to get VmRSS and VmSwap values + +with open('/proc/self/status') as file: + status_list = file.readlines() + +status_names = [] +for s in status_list: + status_names.append(s.split(':')[0]) + +vm_rss_index = status_names.index('VmRSS') +vm_swap_index = status_names.index('VmSwap') + + +# вариант - сжирать мегабайты исходя из собственного VmRSS + VmSwap + + +print(mem_total, swap_total_index, swap_free_index, vm_rss_index, vm_swap_index) + + +########################################################################## + + +def continue_anyway(): + """ + Mem hog if mem err + """ + expanding_list = [] + while True: + try: + expanding_list.append(os.urandom(1)) + except MemoryError: + continue + + +def unlimited_memhog(): + ''' + unlimited mem hogging + ''' + print('Вводите целые неотрицательные числа. Чем больше, тем быстрее потребление памяти.\n1000 same обеспечивает потребление на уровне полтора гиг в секунду,\nurandom работает на скорости максимум 170 M/s') + + same = input("same: ") + urandom = input("urandom: ") + + expanding_list = [] + + print('Unlimited memhogging started!') + + while True: + try: + expanding_list.append(os.urandom(int(urandom))) + expanding_list.append('#' * int(same)) + except MemoryError: + print('MemoryError; continue anyway!') + continue_anyway() + + +########################################################################## + + +# basic bifurcation + +print('WARNING: эта прога способна потратить память и повесить систему, будьте осторожны.') +print('При ее работе следите за показателями памяти.') + + +expanding_list = [] + + +''' +hogging не то +u - unlimited mem hogging with choice of speed and entropy +n - limited mem hogging (hog указанный далее объем метров) +a - уменьшать обем общей доступной памяти (MemAvailable + SwapFree) до тех пор, пока он не станет ниже заданного далее объема + +''' + + +try: + while True: + + print('Select an option from the list below, enter selected letter and press Enter') + print('8 или i или I - запустить бесконечное потребление, предложив выбрать скорость потребления и энтропию') + print('q или любой другой символ - выход (можно просто нажать Enter)') + + li = input(': ') + + if li is 'i' or li is 'I' or li is '8': + unlimited_memhog() + else: + exit() + +except KeyboardInterrupt: + print() + os.kill(os.getpid(), 15) diff --git a/oom-trigger.1 b/oom-trigger.1 new file mode 100644 index 0000000..9028b4c --- /dev/null +++ b/oom-trigger.1 @@ -0,0 +1,3 @@ +.TH oom-trigger 1 +.SH NAME +oom-trigger \- interactive OOM trigger