# Cleanup System Improvements ## Problem Identified The cleanup system was not properly detecting when analysis was finished, causing chromium instances to accumulate and consume all RAM and CPU over time. ## Root Causes 1. **Browser instances not cleaned up after analysis completion** 2. **Session deletion happening before browser cleanup** 3. **Aggressive cleanup being too cautious and skipping actual cleanup** 4. **Missing completion signals from analysis workflow** ## Solutions Implemented ### 1. Enhanced Browser Cleanup (`lib/enhanced-screenshot.ts`) - Added immediate browser cleanup after analysis completion - Improved the `cleanup()` method to: - Close all browser sessions (AI, DIY, and main) - Wait for graceful shutdown - Force kill remaining browser processes - Clean up temporary files ### 2. Improved Analysis Workflow (`lib/ai-analysis.ts`) - Added browser cleanup trigger immediately after analysis completes - Added cleanup trigger even on analysis errors - Cleanup now happens before session deletion to ensure browsers are closed ### 3. Enhanced API Cleanup (`app/api/enhanced-screenshot/route.js`) - Added immediate browser cleanup after screenshot capture - Added cleanup trigger in error handling - Cleanup now runs regardless of environment (not just development) ### 4. Aggressive Cleanup Improvements (`lib/aggressive-cleanup.ts`) - `runPostAnalysisCleanup()` now ignores session status since analysis is complete - More aggressive process termination strategy: - Try graceful shutdown (SIGTERM) first - Wait 5 seconds for graceful shutdown - Force kill (SIGKILL) stubborn processes - Enhanced temp file and shared memory cleanup - Force clear stuck progress sessions ### 5. TradingView Automation Cleanup (`lib/tradingview-automation.ts`) - Improved `forceCleanup()` method to: - Close all pages individually first - Close browser gracefully - Force kill browser process if graceful close fails ### 6. New Monitoring Tools - **Process Monitor API**: `/api/system/processes` - `GET`: Shows current browser processes and active sessions - `POST`: Triggers manual aggressive cleanup - **Test Script**: `test-cleanup-improvements.js` - Validates the complete cleanup workflow - Monitors processes before/after analysis - Tests manual cleanup triggers ## Key Changes Summary ### Cleanup Trigger Points 1. **After analysis completion** (success or error) 2. **After screenshot capture completion** 3. **On API request completion** (success or error) 4. **Manual trigger via `/api/system/processes`** ### Cleanup Strategy 1. **Immediate**: Browser instances closed right after analysis 2. **Graceful**: SIGTERM first, wait 5 seconds 3. **Forceful**: SIGKILL for stubborn processes 4. **Comprehensive**: Temp files, shared memory, stuck sessions ### Detection Improvements - Post-analysis cleanup ignores session status (since analysis is done) - Better process age filtering in regular cleanup - Enhanced process information logging for debugging ## Usage ### Monitor Current Processes ```bash curl http://localhost:3000/api/system/processes ``` ### Trigger Manual Cleanup ```bash curl -X POST http://localhost:3000/api/system/processes ``` ### Test Complete Workflow ```bash node test-cleanup-improvements.js ``` ## Expected Results - **No accumulating browser processes** after analysis completion - **RAM usage stays stable** over multiple analysis cycles - **CPU usage returns to baseline** after each analysis - **Faster subsequent analysis** due to proper cleanup ## Monitoring Commands ```bash # Check browser processes ps aux | grep -E "(chromium|chrome)" | grep -v grep # Monitor memory usage free -h # Check temp directories ls -la /tmp/puppeteer_dev_chrome_profile-* 2>/dev/null || echo "No temp profiles" ls -la /dev/shm/.org.chromium.* 2>/dev/null || echo "No shared memory files" ``` The system should now properly clean up all browser instances and associated resources after each analysis cycle, preventing the RAM and CPU accumulation issues.