# 🔍 Почему падает ChromeDriver на Linux сервере?

## Основные причины падения ChromeDriver

### 1. ❌ **Нехватка памяти (OOM Killer)**

**Самая частая причина!** Chrome требует много RAM:
- Минимум: 512 MB свободной памяти
- Рекомендуется: 1-2 GB свободной памяти
- На серверах с < 1 GB RAM Chrome может быть убит системой

**Симптомы:**
```
Connection refused
Chrome instance exited
```

**Решение:**
- Увеличьте swap (виртуальная память)
- Убейте лишние процессы
- Ограничьте использование памяти другими приложениями

### 2. ⚠️ **Проблемы с /dev/shm (Shared Memory)**

Linux использует `/dev/shm` для shared memory. По умолчанию размер = 50% RAM.

**Проблема:** На серверах с малым количеством RAM `/dev/shm` может быть слишком маленьким.

**Решение:** 
✅ Уже исправлено! Используется `--disable-dev-shm-usage` (использует `/tmp` вместо `/dev/shm`)

### 3. 🔧 **Несовместимость версий Chrome/ChromeDriver**

Версии должны совпадать!

**Проверка:**
```bash
chromium-browser --version
chromedriver --version
```

**Решение:**
```bash
# Обновите оба
apt-get update
apt-get install chromium-browser chromium-chromedriver
```

### 4. 🚫 **Отсутствие необходимых библиотек**

Chrome требует множество системных библиотек.

**Проверка:**
```bash
ldd /usr/bin/chromium-browser | grep "not found"
```

**Решение:**
```bash
apt-get install -f
apt-get install libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2
```

### 5. 🔐 **Проблемы с правами доступа**

Chrome может не запуститься из-за отсутствия прав.

**Решение:**
```bash
# Убедитесь, что пользователь имеет права на запуск
chmod +x /usr/bin/chromium-browser
chmod +x /usr/bin/chromedriver
```

### 6. 📊 **Слишком много процессов Chrome**

Зависшие процессы Chrome могут вызывать конфликты.

**Проверка:**
```bash
ps aux | grep chrome
```

**Решение:**
```bash
# Убейте все процессы Chrome
pkill -9 -f chrome
pkill -9 -f chromedriver
```

## 🔧 Что сделано для исправления

### ✅ Добавлена диагностика системы
- Проверка доступной памяти перед запуском
- Проверка загрузки CPU
- Обнаружение конфликтующих процессов Chrome

### ✅ Максимальная экономия ресурсов
- `--headless=new` - новый стабильный headless режим
- `--disable-dev-shm-usage` - использует /tmp вместо /dev/shm
- Множество флагов для отключения ненужных функций
- Ограничение памяти V8: `--js-flags=--max-old-space-size=256`

### ✅ Улучшенное переподключение
- Автоматическая диагностика причин падения
- Убийство зависших процессов перед переподключением
- Проверка работоспособности нового драйвера

### ✅ Быстрый мониторинг
- Проверка драйвера каждые 0.3 секунды
- Короткое ожидание (2 секунды вместо 12)
- Быстрое обнаружение падений

## 📋 Инструкции по устранению проблем

### Проверка памяти:
```bash
free -h
```

Если свободной памяти < 500 MB:
```bash
# Увеличьте swap
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Сделайте постоянным
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
```

### Убийство зависших процессов:
```bash
# Убить все процессы Chrome
pkill -9 -f chrome
pkill -9 -f chromedriver

# Проверить что убилось
ps aux | grep chrome
```

### Проверка версий:
```bash
chromium-browser --version
chromedriver --version

# Если версии не совпадают - обновите
apt-get update
apt-get install chromium-browser chromium-chromedriver
```

### Проверка логов системы:
```bash
# Проверить логи OOM Killer (если Chrome убивается из-за памяти)
dmesg | grep -i "out of memory"
dmesg | grep -i "killed process"
```

## 💡 Рекомендации

1. **Минимум 1 GB свободной RAM** для стабильной работы
2. **Установите swap** если RAM < 1 GB
3. **Регулярно очищайте** зависшие процессы Chrome
4. **Мониторьте логи** для выявления паттернов падений
5. **Используйте последние версии** Chrome и ChromeDriver

## 🐛 Если проблема сохраняется

Запустите бота и посмотрите диагностику в логах:
- Проверка памяти при запуске
- Диагностика причин падения при переподключении

Логи покажут точную причину падения!

---

**Теперь бот автоматически диагностирует причины падения и пытается их исправить!** 🚀
