Why Hit-Mode Agents Are a Bottleneck
Imagine: an online building materials store with a catalog of 200,000 products. During off-peak hours, pages load in a second, but during the day, 10% of requests slow down to 8 seconds. The cause: Bitrix agents running in 'hit mode'. Each HTTP request checks the b_agent table, and if the execution time is due, the agent runs synchronously, making the user wait. Under peak load (100+ concurrent users), this can cause a 'cascading slowdown' effect: response time grows exponentially, and server load increases by 2-3 times. "After migration, our site speed improved 10x" — one client noted.
We help migrate 1C-Bitrix agents to cron — this moves background tasks from HTTP requests to a separate scheduled process. Result: stable site speed regardless of traffic and savings on server resources (up to 30% CPU reduction, equivalent to $100–$200 per month on a typical VPS). Contact us for a diagnosis of the current state — we will assess the situation in one day.
Three Problems of Hit-Mode Operation
- Unpredictability. An agent with a 300-second period only runs when the next visitor arrives. At night, with low traffic, execution can be delayed for hours. This is especially critical for 1C synchronization and notification tasks.
- Page slowdowns. A heavy agent (1C sync, sending emails) executes during the request, increasing response time for a specific user. Result: up to 7% conversion loss for each second of delay.
-
Time limit.
max_execution_time(usually 30-60 seconds) can interrupt an agent, leaving the task incomplete. This leads to data duplication and errors.
Cron Advantages: Comparison Table
| Criteria | Hit Mode | Via Cron |
|---|---|---|
| Execution time | During request | Background, scheduled |
| Predictability | Depends on traffic | Always on time |
| User impact | Direct (slowdowns) | None |
| Load management | Impossible | Configurable interval and locks |
| Maximum time | Limited by PHP | Unlimited (can use set_time_limit(0)) |
Cron is up to 10 times more efficient than hit mode for heavy agents.
Common Mistakes When Migrating to Cron
| Mistake | Consequences | Solution |
|---|---|---|
| Incorrect PHP path | Agents don't run | Use which php |
| No locks | Parallel runs — data duplication | Add flock or IPC semaphore to crontab |
| Ignoring critical agents | Failure of important business processes | Check each agent separately |
How to Migrate Agents to Cron Correctly
Step 1. Check Current Mode
In the admin panel: "Settings → Module Settings → Main Module". Parameter "Use Agents" — if set to "Hit mode", migration is needed. Also run SQL: SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; — if NEXT_EXEC lags behind LAST_EXEC by more than an hour, it's an indirect sign of a problem.
Step 2. Configure Crontab
Connect via SSH and open crontab:
crontab -e -u bitrix Add lines:
# Агенты Битрикс — каждую минуту * * * * * /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 Check PHP path with which php. To protect against parallel processes, add 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 Step 3. Switch Mode in Bitrix
After setting up cron and testing (run script manually: /usr/bin/php -f /path/to/cron_events.php), switch the option to "Via Cron" and save. Clear the platform cache. It is recommended to test on a staging copy first.
Step 4. Verify Execution
Run SQL:
SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; LAST_EXEC should update every minute. If not, check system cron log (/var/log/cron) and PHP error output. Also set up monitoring — for example, send a Telegram alert if an agent hasn't run for more than 5 minutes.
Why Cron Saves Server Resources?
In hit mode, every request loads the server by calling CAgent::CheckAgents(). On weak configurations (1-2 cores), this can take up to 200-300 ms per request. At 1000 requests per hour, that's an extra 50-80 seconds of CPU time per hour. Cron completely removes this load, and the background process runs for 1-2 seconds per minute.
Case Studies from Our Practice
90% Reduction in Response Time
Client — a large online building materials store. Complaints about "random" slowdowns up to 5-10 seconds. Profiling showed: in 10% of requests, CAgent::CheckAgents() added 3-8 seconds due to the search reindexing agent and notification queue processing.
After migrating all agents to cron:
-
CAgent::CheckAgents()disappeared from the profiler. - 99th percentile response time dropped from 8.2 to 0.9 seconds.
- Reindexing agents ran every minute unnoticed by users.
- Server resource savings were substantial.
Nightly 1C Synchronization
Client — an online home appliances store. The sync agent with a 3600-second period ran irregularly; at night, stock wasn't updated until morning. The cause: hit mode and low night traffic.
We migrated agents to cron with a one-minute interval. The sync agent started running strictly on schedule. Additionally, we found the agent sometimes exceeded max_execution_time — we added set_time_limit(0) at the start of the script. Now stock updates every 60 minutes around the clock.
What Is Included in the Work
- Diagnostics of current agent mode and its impact on performance.
- Crontab setup with locks against parallel runs.
- Switching mode in Bitrix and clearing cache.
- Testing each critical agent (notifications, exports, indexing).
- Setting up execution monitoring with failure alerts (Telegram, email).
- Detailed documentation and maintenance guide.
- 30-day post-migration support.
- Training for your team on managing agents.
Timelines and How to Order
Basic setup takes 4–8 hours. If comprehensive diagnostics and optimization of slow agents are needed — 1–3 business days. The cost is calculated individually after an audit, but on average it pays for itself in 2-3 months due to reduced load. With over 8 years of Bitrix expertise and 150+ successful migrations, our certified team guarantees a smooth transition.
Get a consultation: contact us, and we will propose a work plan for your project. Evaluate your site's performance for free.

