#!/usr/bin/env python3 # интерактивный oom-trigger from memco import * from signal import signal, SIGTERM from time import sleep from sys import exit def signal_handler(signum, frame): print('Got signal {}'.format(signum)) # sleep(1) # exit() signal(SIGTERM, signal_handler) # печать показателей на этапах работы def print_mem(): mem_tup = mem_check_main() mem_available = mem_tup[0] swap_total = mem_tup[1] swap_free = mem_tup[2] print( 'MemAvailable: ', round(mem_available / 1024 / 1024, 3), 'GiB,', round(mem_available / 1024), 'MiB,', round(mem_available / mem_total * 100, 1), '%' ) if swap_total != 0: print( 'SwapFree: ', round(swap_free / 1024 / 1024, 3), 'GiB,', round(swap_free / 1024), 'MiB,', round(swap_free / swap_total * 100, 1), '%' ) print( 'Total Free: ', round((mem_available + swap_free) / 1024 / 1024, 3), 'GiB,', round((mem_available + swap_free) / 1024), 'MiB,', round((mem_available + swap_free) / (mem_total + swap_total) * 100, 1), '%' ) else: print( 'Swap disabled' ) # бесконечный жор def inf(): print( 'Вводите целые неотрицательные числа. Чем больше, тем быстрее потребление памяти.\n1000 same обеспечивает потребление на уровне полтора гиг в секунду,\nurandom работает на скорости максимум 170 M/s' ) same = input("same: ") urandom = input("urandom: ") expanding_list = [] print( 'Процесс неограниченного потребления пошёл... Press Ctrl + C for exit' ) while True: try: expanding_list.append(os.urandom(int(urandom))) expanding_list.append('#' * int(same)) except MemoryError: print('MemoryError, start побайтовая добивалка!') terminal() # жор числп гиг def lim(): expanding_list = [] n = input('На сколько гигабайт уменьшить доступную память?\n: ') print('Погнали тратить ' + n + ' гиг...') i = 0 while True: i += 1 try: expanding_list.append(os.urandom(int(100))) expanding_list.append('#' * int(300)) except MemoryError: print('MemoryError!') break if i > 2020202 * int(n): print('DONE') break return expanding_list # жор до остатка мегабайт def lim2avail(): expanding_list = [] n = input( 'Сколько мегабайт общей доступной памяти (MemAvailable + SwapFree) оставить?\nВведите целое положительное число: ' ) # проверка на целое положительное if n.isdigit() == True: n = int(n) else: print( 'Вы ввели не целое положительное число' ) return 0 if n == 0: print( 'Вы ввели не целое положительное число' ) return 0 print( 'Погнали уменьшать доступную память до уровня ниже ' + str(n) + ' MiB...' ) while True: try: expanding_list.append(os.urandom(5000)) expanding_list.append('#' * 5000) except MemoryError: print('MemoryError!') break if total_mem_available() <= n: print('DONE') break return expanding_list print('WARNING: эта прога способна потратить память и повесить систему, будьте осторожны.') print('При ее работе следите за показателями памяти.') ex_list = [] try: while True: print() print_mem() print() print('Выберите вариант из списка ниже') print('8 или i или I - запустить бесконечное потребление, предложив выбрать скорость потребления и энтропию') print('7 или l или L - запустить ограниченное потребление заданного числа гигов') print('6 или a или A - жрать память пока количество доступной памяти не опустится ниже заданного') print('0 или с или С - очистить накопления при их наличии') print('q или любой другой символ - выход (можно просто нажать Enter)') li = input(': ') if li is 'l' or li is 'L' or li is '7': x = lim() ex_list.append(x) elif li is 'i' or li is 'I' or li is '8': inf() elif li is 'c' or li is 'C' or li is '0': ex_list = [] x = 0 y = 0 elif li is '6' or li is 'a' or li is 'A': y = lim2avail() ex_list.append(y) else: exit() except KeyboardInterrupt: print() print_mem() selfterm()