112 lines
3.8 KiB
Bash
Executable File
112 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# VS Code Session Monitor and Restart Script
|
|
# This script monitors VS Code memory usage and session health
|
|
|
|
VSCODE_MEMORY_LIMIT=2000000 # 2GB in KB
|
|
CHECK_INTERVAL=30 # Check every 30 seconds
|
|
LOG_FILE="/tmp/vscode_monitor.log"
|
|
|
|
echo "$(date): Starting VS Code session monitor..." >> "$LOG_FILE"
|
|
|
|
monitor_vscode() {
|
|
while true; do
|
|
# Get VS Code process info
|
|
VSCODE_PIDS=$(pgrep -f "code.*--type=(utility|zygote)" | head -5)
|
|
|
|
if [ -n "$VSCODE_PIDS" ]; then
|
|
TOTAL_MEMORY=0
|
|
PROCESS_COUNT=0
|
|
|
|
for pid in $VSCODE_PIDS; do
|
|
if [ -f "/proc/$pid/status" ]; then
|
|
MEMORY=$(awk '/VmRSS:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0)
|
|
TOTAL_MEMORY=$((TOTAL_MEMORY + MEMORY))
|
|
PROCESS_COUNT=$((PROCESS_COUNT + 1))
|
|
fi
|
|
done
|
|
|
|
echo "$(date): VS Code processes: $PROCESS_COUNT, Total memory: ${TOTAL_MEMORY}KB" >> "$LOG_FILE"
|
|
|
|
# Check if memory usage is too high
|
|
if [ "$TOTAL_MEMORY" -gt "$VSCODE_MEMORY_LIMIT" ]; then
|
|
echo "$(date): WARNING - VS Code memory usage too high: ${TOTAL_MEMORY}KB" >> "$LOG_FILE"
|
|
echo "$(date): Recommend restarting VS Code to prevent crashes" >> "$LOG_FILE"
|
|
|
|
# Optional: Force cleanup of specific high-memory processes
|
|
for pid in $VSCODE_PIDS; do
|
|
if [ -f "/proc/$pid/status" ]; then
|
|
MEMORY=$(awk '/VmRSS:/ {print $2}' "/proc/$pid/status" 2>/dev/null || echo 0)
|
|
if [ "$MEMORY" -gt 500000 ]; then # 500MB
|
|
echo "$(date): High memory process (PID $pid): ${MEMORY}KB" >> "$LOG_FILE"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Check for renderer crashes
|
|
if grep -q "renderer process gone" ~/.config/Code/logs/*/main.log 2>/dev/null; then
|
|
echo "$(date): Renderer crash detected - recommend restart" >> "$LOG_FILE"
|
|
fi
|
|
fi
|
|
|
|
sleep "$CHECK_INTERVAL"
|
|
done
|
|
}
|
|
|
|
check_session_limits() {
|
|
echo "=== VS Code Session Limits Analysis ==="
|
|
echo "Current system limits:"
|
|
ulimit -a | grep -E "(processes|memory|files)"
|
|
echo ""
|
|
|
|
echo "Current VS Code processes:"
|
|
ps aux | grep -E "(code|vscode)" | grep -v grep | wc -l
|
|
echo ""
|
|
|
|
echo "VS Code memory usage:"
|
|
ps -o pid,ppid,pcpu,pmem,rss,args -C code | head -10
|
|
echo ""
|
|
|
|
echo "GitHub Copilot Chat requests (last 50 lines):"
|
|
find ~/.config/Code/logs -name "*copilot*" -type f -exec tail -50 {} \; 2>/dev/null | grep -c "ccreq:"
|
|
echo ""
|
|
|
|
echo "Recent crashes:"
|
|
grep "crashed" ~/.config/Code/logs/*/main.log 2>/dev/null | tail -5
|
|
}
|
|
|
|
# Function to clean up VS Code cache and temporary files
|
|
cleanup_vscode() {
|
|
echo "$(date): Starting VS Code cleanup..." >> "$LOG_FILE"
|
|
|
|
# Clean extension host logs
|
|
find ~/.config/Code/logs -name "*.log" -size +10M -delete 2>/dev/null
|
|
|
|
# Clean old crash dumps
|
|
find ~/.config/Code/Crashpad -type f -mtime +7 -delete 2>/dev/null
|
|
|
|
# Clean temporary MCP sockets
|
|
find /tmp -name "mcp-*" -type d -mtime +1 -exec rm -rf {} \; 2>/dev/null
|
|
|
|
echo "$(date): Cleanup completed" >> "$LOG_FILE"
|
|
}
|
|
|
|
# Main execution
|
|
case "${1:-check}" in
|
|
"monitor")
|
|
monitor_vscode
|
|
;;
|
|
"check")
|
|
check_session_limits
|
|
;;
|
|
"cleanup")
|
|
cleanup_vscode
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {monitor|check|cleanup}"
|
|
echo " monitor: Start continuous monitoring"
|
|
echo " check: Show current session limits and status"
|
|
echo " cleanup: Clean VS Code cache and logs"
|
|
;;
|
|
esac |