MaxKB/apps/maxkb/settings/mem.py
2025-12-05 18:12:47 +08:00

31 lines
891 B
Python

# coding=utf-8
import os
import gc
import threading
from maxkb.const import CONFIG
from common.utils.logger import maxkb_logger
import random
import psutil
CURRENT_PID=os.getpid()
# 1 hour
GC_INTERVAL = 3600
def enable_force_gc():
before = int(psutil.Process(CURRENT_PID).memory_info().rss / 1024 / 1024)
collected = gc.collect()
try:
import ctypes
ctypes.CDLL("libc.so.6").malloc_trim(0)
except Exception:
pass
after = int(psutil.Process(CURRENT_PID).memory_info().rss / 1024 / 1024)
maxkb_logger.debug(f"(PID: {CURRENT_PID}) Forced GC ({collected} objects and {before - after} MB recycled)")
t = threading.Timer(GC_INTERVAL - random.randint(0, 900), enable_force_gc)
t.daemon = True
t.start()
if CONFIG.get("ENABLE_FORCE_GC", '1') == "1":
maxkb_logger.info(f"(PID: {CURRENT_PID}) Forced GC enabled")
enable_force_gc()