Fix memory guard: remove RLIMIT_AS (blocks Python heap), VmRSS-only

This commit is contained in:
ramseshk
2026-08-06 06:40:08 +00:00
parent 298b9c8020
commit a8ed3cafe0
+6 -5
View File
@@ -32,15 +32,16 @@ from common.risk import risk_summary
from strategies.quant_report import compute_quant_report from strategies.quant_report import compute_quant_report
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
# Memory guard: cap RSS at 512MB, GC-aggressive at 256MB # Memory guard: check RSS via /proc, force GC at 256MB,
# log warning at 384MB, hard exit at 512MB.
# RLIMIT_AS disabled — Python heap needs virtual headroom.
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
import resource, gc, signal import gc, os as _os
MEM_SOFT_LIMIT = 256 * 1024 * 1024 # 256 MB — force GC MEM_SOFT_LIMIT = 256 * 1024 * 1024 # 256 MB — force GC
MEM_WARN_LIMIT = 384 * 1024 * 1024 # 384 MB — log warning
MEM_HARD_LIMIT = 512 * 1024 * 1024 # 512 MB — terminate MEM_HARD_LIMIT = 512 * 1024 * 1024 # 512 MB — terminate
resource.setrlimit(resource.RLIMIT_AS, (MEM_HARD_LIMIT, MEM_HARD_LIMIT))
def check_memory(): def check_memory():
"""Check RSS, force GC if over soft limit, raise if over hard limit.""" """Check RSS, force GC if over soft limit, raise if over hard limit."""
try: try:
@@ -51,7 +52,7 @@ def check_memory():
rss = rss_kb * 1024 rss = rss_kb * 1024
if rss > MEM_HARD_LIMIT: if rss > MEM_HARD_LIMIT:
print(f"[CRIT] RSS {rss_kb // 1024}MB > 512MB — exiting", flush=True) print(f"[CRIT] RSS {rss_kb // 1024}MB > 512MB — exiting", flush=True)
os._exit(1) _os._exit(1)
if rss > MEM_SOFT_LIMIT: if rss > MEM_SOFT_LIMIT:
gc.collect() gc.collect()
gc.collect() gc.collect()