Почему агенты на хитах — узкое место?
Представьте: интернет-магазин стройматериалов с каталогом на 200 000 товаров. В непиковые часы страницы открываются за секунду, но днём 10% запросов тормозят до 8 секунд. Причина — агенты Битрикса, работающие в режиме «на хитах». Каждый HTTP-запрос проверяет таблицу b_agent, и если подошло время выполнения — агент запускается синхронно, заставляя пользователя ждать. При пиковой нагрузке (100+ одновременных пользователей) это может вызвать эффект «каскадного торможения»: время ответа растёт экспоненциально, а серверная нагрузка увеличивается в 2-3 раза.
Мы помогаем перевести агенты 1С-Битрикс на cron — это перенос выполнения фоновых задач из HTTP-запросов в отдельный процесс по расписанию. Результат: стабильная скорость сайта независимо от трафика и экономия до 15 000 руб./мес. на серверных ресурсах за счёт снижения пиковых нагрузок. Свяжитесь с нами для диагностики текущего состояния — оценим ситуацию за один день.
Три проблемы режима «на хитах»
- Непредсказуемость. Агент с периодом 300 секунд запускается только когда придёт следующий посетитель. Ночью, при низком трафике, выполнение может отложиться на часы. Это особенно критично для задач синхронизации с 1С и отправки уведомлений.
- Замедление страниц. Тяжёлый агент (синхронизация с 1С, отправка писем) выполняется прямо во время запроса, увеличивая время ответа для конкретного пользователя. В результате — потеря конверсии до 7% на каждую секунду задержки.
-
Ограничение по времени.
max_execution_time(обычно 30–60 секунд) может прервать агент, оставив задачу незавершённой. Это приводит к дублированию данных и ошибкам.
Преимущества cron: таблица сравнения
| Критерий | На хитах | Через cron |
|---|---|---|
| Время выполнения | В момент запроса | Фоном, по расписанию |
| Предсказуемость | Зависит от трафика | Всегда строго по интервалу |
| Влияние на пользователей | Прямое (тормоза) | Отсутствует |
| Управление нагрузкой | Невозможно | Настраивается интервал и блокировки |
| Максимальное время | Ограничено PHP | Не ограничено (можно set_time_limit(0)) |
Типичные ошибки при переводе на cron
| Ошибка | Последствия | Решение |
|---|---|---|
| Неверный путь к PHP | Агенты не запускаются | Использовать which php |
| Отсутствие блокировок | Параллельные запуски — дублирование данных | Добавить flock в crontab |
| Игнорирование критичных агентов | Сбой важных бизнес-процессов | Проверить каждый агент отдельно |
Как перевести агентов на cron правильно?
Шаг 1. Проверка текущего режима
В админке: «Настройки → Настройки модулей → Главный модуль». Параметр «Использование агентов» — если стоит «В режиме хитов», нужен перевод. Также можно выполнить SQL-запрос: SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; — если NEXT_EXEC отстаёт от LAST_EXEC более чем на час, это косвенный признак проблемы.
Шаг 2. Настройка crontab
Подключитесь к серверу по SSH и откройте crontab:
crontab -e -u bitrix Добавьте строки:
# Агенты Битрикс — каждую минуту * * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1 # Очередь почтовых событий — каждые 5 минут */5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/event_exec.php > /dev/null 2>&1 Проверьте путь к PHP через which php. Для защиты от параллельных процессов добавьте flock:
* * * * * /usr/bin/flock -n /tmp/bitrix_cron.lock /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1 Шаг 3. Переключение режима в Битриксе
После настройки cron и проверки (запустите скрипт вручную: /usr/bin/php -f /path/to/cron_events.php) — переключите опцию на «Через cron» и сохраните. Очистите кеш платформы. Рекомендуется сначала перевести тестовую копию сайта.
Шаг 4. Проверка выполнения
Выполните SQL-запрос:
SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; LAST_EXEC должен обновляться каждую минуту. Если нет — проверьте системный лог cron (/var/log/cron) и вывод ошибок PHP. Также настройте мониторинг — например, отправляйте алерт в Telegram если агент не выполнялся более 5 минут.
Почему cron экономит ресурсы сервера?
При работе на хитах каждый запрос нагружает сервер вызовом CAgent::CheckAgents(). На слабых конфигурациях (1-2 ядра) это может занимать до 200-300 мс на запрос, что при 1000 запросов в час даёт дополнительную нагрузку в 50-80 секунд процессорного времени в час. Cron убирает эту нагрузку полностью, а фоновый процесс выполняется 1-2 секунды в минуту.
Кейсы из нашей практики
Снижение времени ответа на 90%
Клиент — крупный онлайн-магазин стройматериалов. Жалобы на «случайные» тормоза до 5–10 секунд. Профайлер показал: в 10% запросов CAgent::CheckAgents() добавлял 3–8 секунд из-за агента переиндексации поиска и обработки очереди уведомлений.
После перевода всех агентов на cron:
-
CAgent::CheckAgents()исчез из профайлера. - 99-й перцентиль времени ответа снизился с 8,2 до 0,9 секунды.
- Агенты переиндексации стали работать раз в минуту незаметно для пользователей.
- Экономия серверных ресурсов составила около 12 000 руб./мес.
Ночная синхронизация с 1С
Клиент — интернет-магазин бытовой техники. Агент синхронизации остатков с периодом 3600 секунд выполнялся нерегулярно, ночью остатки не обновлялись до утра. Причина — режим «на хитах» и низкий ночной трафик.
Мы перевели агенты на cron с запуском каждую минуту. Агент синхронизации стал выполняться строго по расписанию. Дополнительно обнаружили, что агент иногда превышал max_execution_time — добавили set_time_limit(0) в начало скрипта. Теперь остатки обновляются каждые 60 минут круглосуточно.
Что входит в работу
- Диагностика текущего режима агентов и их влияния на производительность.
- Настройка crontab с блокировками от параллельных запусков.
- Переключение режима в Битриксе и очистка кеша.
- Тестирование каждого критичного агента (уведомления, выгрузки, индексация).
- Настройка мониторинга выполнения с алертами при сбоях.
- Документация по обслуживанию и восстановлению.
- Рекомендации по дальнейшей оптимизации (кеширование, отложенные функции).
Сроки и как заказать
Базовая настройка занимает 4–8 часов. Если требуется комплексная диагностика и оптимизация медленных агентов — 1–3 рабочих дня. Стоимость рассчитывается индивидуально после аудита, но в среднем окупается за 2-3 месяца за счёт снижения нагрузки.
Получите консультацию: свяжитесь с нами, и мы предложим план работ под ваш проект. Оцените производительность вашего сайта — это бесплатно.







