Hephaestian Sea

Script for Running Out of Memory

import re
from time import sleep
from pathlib import Path

def to_si(x: float, *, base: int = 1000) -> str:
    for prefix in ["", "K", "M", "G", "T", "P"]:
        if x < base:
            return f"{x:.2f}{prefix}"

        x /= float(base)

    return f"{x}Y"

value_re = re.compile(r"^\w+:\s*(\d+)\s+\w+$")

def extract_value(x: str) -> int:
    m = value_re.match(x)
    assert m is not None, x

    return int(m.group(1))

def pr():
    data = Path("/proc/self/status").read_text().split("\n")

    vm = 0
    rss = 0
    swap = 0
    for l in data:
        if l.startswith("VmSize:"):
            vm = extract_value(l)
        elif l.startswith("VmRSS:"):
            rss = extract_value(l)
        elif l.startswith("VmSwap:"):
            swap = extract_value(l)
        
    print(f"VM: {to_si(vm * 1024, base=1024)}iB RSS: {to_si(rss * 1024, base=1024)}iB Swap: {to_si(swap * 1024, base=1024)}iB")
    
death = []

kb = b"O" * 1024
mb = kb * 1024
gb = mb * 1024

pr()
for i in range(100000):
    death.append(bytearray(gb))
    sleep(0.2)
    pr()

print("Done")
sleep(60)