This commit is contained in:
Alexey Avramov
2019-04-04 15:08:27 +09:00
parent 9323a9f39f
commit ec2f960383
15 changed files with 39 additions and 5 deletions

214
trash/oom-trigger Executable file
View File

@@ -0,0 +1,214 @@
#!/usr/bin/env python3
# интерактивный oom-trigger
from ctypes import CDLL
def mlockall():
"""Lock all memory to prevent swapping nohang process."""
MCL_CURRENT = 1
MCL_FUTURE = 2
MCL_ONFAULT = 4
libc = CDLL('libc.so.6', use_errno=True)
result = libc.mlockall(
MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT
)
if result != 0:
result = libc.mlockall(
MCL_CURRENT | MCL_FUTURE
)
if result != 0:
log('Cannot lock all memory')
else:
log('All memory locked with MCL_CURRENT | MCL_FUTURE')
else:
log('All memory locked with MCL_CURRENT | MCL_FUTURE | MCL_ONFAULT')
mlockall()
from memco import *
# печать показателей на этапах работы
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()