operations.py 879 Bytes
Newer Older
1 2 3
import os
import signal
import tempfile
4
import gc
5 6 7 8 9 10

from datetime import datetime
from meliae import scanner


def dump_memory(signum, frame):
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    """
    Dump memory stats for the current process to a temp directory.
    Uses the meliae output format.
    """

    timestamp = datetime.now().isoformat()
    format_str = '{}/meliae.{}.{}.{{}}.dump'.format(
        tempfile.gettempdir(),
        timestamp,
        os.getpid(),
    )

    scanner.dump_all_objects(format_str.format('pre-gc'))

    # force garbarge collection
    for gen in xrange(3):
        gc.collect(gen)
        scanner.dump_all_objects(
            format_str.format("gc-gen-{}".format(gen))
        )
31

32

33 34 35 36 37
def install_memory_dumper(dump_signal=signal.SIGPROF):
    """
    Install a signal handler on `signal` to dump memory stats for the current process.
    """
    signal.signal(dump_signal, dump_memory)