master_adapt_detect/check_system_resources.py
2025-10-01 14:32:55 -05:00

133 lines
No EOL
4.2 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Check and display system resource limits and current usage
"""
import os
import subprocess
import resource
import psutil
def check_file_descriptors():
"""Check file descriptor limits and usage"""
print("🔍 FILE DESCRIPTOR LIMITS")
print("=" * 40)
# Get current limits
soft_limit, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
print(f"Current soft limit: {soft_limit:,}")
print(f"Current hard limit: {hard_limit:,}")
# Get current usage
pid = os.getpid()
try:
result = subprocess.run(['lsof', '-p', str(pid)], capture_output=True, text=True)
open_files = len(result.stdout.strip().split('\n')) - 1
print(f"Current open files: {open_files}")
print(f"Usage: {open_files/soft_limit*100:.1f}% of soft limit")
except:
print("Could not determine current usage")
print()
# Recommendations
if soft_limit < 10000:
print("⚠️ RECOMMENDATION: Your soft limit is quite low")
print(" Consider increasing it with: ulimit -n 65536")
elif soft_limit < 65536:
print(" RECOMMENDATION: Consider increasing soft limit for heavy processing")
print(" Command: ulimit -n 65536")
else:
print("✅ File descriptor limits look good")
print()
def check_memory():
"""Check memory usage"""
print("🧠 MEMORY USAGE")
print("=" * 40)
memory = psutil.virtual_memory()
swap = psutil.swap_memory()
print(f"RAM: {memory.percent:.1f}% used ({memory.used/1024**3:.1f}GB / {memory.total/1024**3:.1f}GB)")
print(f"Swap: {swap.percent:.1f}% used ({swap.used/1024**3:.1f}GB / {swap.total/1024**3:.1f}GB)")
if memory.percent > 80:
print("⚠️ High RAM usage detected")
if swap.percent > 50:
print("⚠️ High swap usage detected")
print()
def check_processes():
"""Check running processes"""
print("🔄 PROCESS INFORMATION")
print("=" * 40)
# CPU info
print(f"CPU cores: {os.cpu_count()}")
print(f"CPU usage: {psutil.cpu_percent(interval=1):.1f}%")
# Load average
try:
load1, load5, load15 = os.getloadavg()
print(f"Load average: {load1:.2f}, {load5:.2f}, {load15:.2f}")
except:
print("Load average: unavailable")
print()
def recommend_settings():
"""Recommend optimal settings"""
print("🎯 RECOMMENDED SETTINGS")
print("=" * 40)
cpu_count = os.cpu_count()
memory_gb = psutil.virtual_memory().total / (1024**3)
print(f"For your system ({cpu_count} cores, {memory_gb:.1f}GB RAM):")
print()
# Layout workers
if memory_gb < 16:
layout_workers = min(2, cpu_count // 2)
print(f"--layout-workers {layout_workers} (conservative for {memory_gb:.1f}GB RAM)")
elif memory_gb < 32:
layout_workers = min(4, cpu_count // 2)
print(f"--layout-workers {layout_workers} (balanced for {memory_gb:.1f}GB RAM)")
else:
layout_workers = min(6, cpu_count // 2)
print(f"--layout-workers {layout_workers} (aggressive for {memory_gb:.1f}GB RAM)")
# Local workers
local_workers = max(1, cpu_count - 2)
print(f"--local-workers {local_workers} (CPU cores - 2)")
print()
print("Full command suggestion:")
print("python cli.py --all --hybrid --split-simple --refinement-mode \\")
print(" --inlier-threshold 0.15 --inlier-ratio-threshold 0.2 \\")
print(" --fallback-one-at-a-time --enable-cost-tracking --cost-report \\")
print(f" --parallel-layouts --layout-workers {layout_workers} --local-workers {local_workers}")
print()
def main():
print("🔧 SYSTEM RESOURCE CHECK")
print("=" * 50)
print()
check_file_descriptors()
check_memory()
check_processes()
recommend_settings()
print("💡 TROUBLESHOOTING TIPS:")
print("- If you get 'Too many open files': restart terminal and run 'ulimit -n 65536'")
print("- If memory usage is high: reduce --layout-workers")
print("- If processing is slow: check if swap usage is very high")
print("- Monitor with: Activity Monitor or 'top' command")
if __name__ == "__main__":
main()