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:
@@ -14,6 +14,8 @@ COPY . .
|
|||||||
RUN mkdir -p /app/data
|
RUN mkdir -p /app/data
|
||||||
|
|
||||||
ENV PYTHONUNBUFFERED=1
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
ENV PYTHONOPTIMIZE=1
|
||||||
|
|
||||||
EXPOSE 8000
|
EXPOSE 8000
|
||||||
|
|
||||||
|
|||||||
@@ -23,5 +23,10 @@ services:
|
|||||||
- DB_USER=${DB_USER}
|
- DB_USER=${DB_USER}
|
||||||
- DB_PASSWORD=${DB_PASSWORD}
|
- DB_PASSWORD=${DB_PASSWORD}
|
||||||
- DB_NAME=${DB_NAME}
|
- DB_NAME=${DB_NAME}
|
||||||
|
- PYTHONDONTWRITEBYTECODE=1
|
||||||
|
- PYTHONOPTIMIZE=1
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
|
mem_limit: 512m
|
||||||
|
mem_reservation: 256m
|
||||||
|
pids_limit: 50
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import subprocess
|
|||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
LOG_DIR = "/app/data/logs"
|
LOG_DIR = "/app/data/logs"
|
||||||
@@ -25,7 +26,11 @@ print("=" * 40)
|
|||||||
|
|
||||||
processes = []
|
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(f"✅ Iniciando {name}...")
|
||||||
|
|
||||||
log_path = f"{LOG_DIR}/{name.lower().replace(' ', '_')}.log"
|
log_path = f"{LOG_DIR}/{name.lower().replace(' ', '_')}.log"
|
||||||
@@ -39,9 +44,9 @@ def start_process(cmd, name):
|
|||||||
processes.append((p, name))
|
processes.append((p, name))
|
||||||
return p
|
return p
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
p3 = start_process(["python3", "panel/main.py"], "Panel Web")
|
p3 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "panel/main.py"], "Panel Web", delay_before=0)
|
||||||
|
|
||||||
print("=" * 40)
|
print("=" * 40)
|
||||||
print("🎉 Todos los servicios funcionando!")
|
print("🎉 Todos los servicios funcionando!")
|
||||||
@@ -69,10 +74,9 @@ while True:
|
|||||||
if p.poll() is not None:
|
if p.poll() is not None:
|
||||||
log(f"⚠️ {name} se detuvo, reiniciando...")
|
log(f"⚠️ {name} se detuvo, reiniciando...")
|
||||||
if name == "Discord Bot":
|
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":
|
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":
|
elif name == "Panel Web":
|
||||||
p3 = start_process(["python3", "panel/main.py"], "Panel Web")
|
p3 = start_process(["python3", "-X", "faulthandler", "-X", "importsys", "panel/main.py"], "Panel Web", delay_before=0)
|
||||||
import time
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
|||||||
Reference in New Issue
Block a user