perf: Optimizar inicio de servicios para reducir consumo de RAM

- Inicio escalonado con delays: Panel Web → 5s → Telegram → 10s → Discord
- Flags de Python para reducir footprint de memoria
- Variables de entorno PYTHONDONTWRITEBYTECODE y PYTHONOPTIMIZE
- Límites de memoria en docker-compose.yml
This commit is contained in:
2026-03-20 03:47:59 -06:00
parent eaf4f51c5a
commit baaf4bc1f7
3 changed files with 19 additions and 8 deletions

View File

@@ -14,6 +14,8 @@ COPY . .
RUN mkdir -p /app/data
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONOPTIMIZE=1
EXPOSE 8000

View File

@@ -23,5 +23,10 @@ services:
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
- DB_NAME=${DB_NAME}
- PYTHONDONTWRITEBYTECODE=1
- PYTHONOPTIMIZE=1
env_file:
- .env
mem_limit: 512m
mem_reservation: 256m
pids_limit: 50

View File

@@ -3,6 +3,7 @@ import subprocess
import sys
import os
import signal
import time
from datetime import datetime
LOG_DIR = "/app/data/logs"
@@ -25,7 +26,11 @@ print("=" * 40)
processes = []
def start_process(cmd, name):
def start_process(cmd, name, delay_before=0):
if delay_before > 0:
log(f"⏳ Esperando {delay_before}s antes de iniciar {name}...")
time.sleep(delay_before)
log(f"✅ Iniciando {name}...")
log_path = f"{LOG_DIR}/{name.lower().replace(' ', '_')}.log"
@@ -39,9 +44,9 @@ def start_process(cmd, name):
processes.append((p, name))
return p
p1 = start_process(["python3", "botdiscord/bot.py"], "Discord Bot")
p2 = start_process(["python3", "bottelegram/telegram_bot.py"], "Telegram Bot")
p3 = start_process(["python3", "panel/main.py"], "Panel Web")
p1 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "botdiscord/bot.py"], "Discord Bot", delay_before=10)
p2 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "bottelegram/telegram_bot.py"], "Telegram Bot", delay_before=5)
p3 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "panel/main.py"], "Panel Web", delay_before=0)
print("=" * 40)
print("🎉 Todos los servicios funcionando!")
@@ -69,10 +74,9 @@ while True:
if p.poll() is not None:
log(f"⚠️ {name} se detuvo, reiniciando...")
if name == "Discord Bot":
p1 = start_process(["python3", "botdiscord/bot.py"], "Discord Bot")
p1 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "botdiscord/bot.py"], "Discord Bot", delay_before=10)
elif name == "Telegram Bot":
p2 = start_process(["python3", "bottelegram/telegram_bot.py"], "Telegram Bot")
p2 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "bottelegram/telegram_bot.py"], "Telegram Bot", delay_before=5)
elif name == "Panel Web":
p3 = start_process(["python3", "panel/main.py"], "Panel Web")
import time
p3 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "panel/main.py"], "Panel Web", delay_before=0)
time.sleep(5)