On one project with a catalog of 12,000 products, search agents and 1C synchronization ran every 30 seconds via hitAgent. Each hit added 700 ms to response time, and every 2 minutes a page took 3 seconds due to locking. The b_agent table accumulated 400 records with NEXT_EXEC a week in the past. This situation is typical for high-load Bitrix sites: the background agent queue degrades gradually but eventually leads to response time drops and increased server load. If left unaddressed, the business loses conversion and visitors due to slow pages.
Over 5 years, we optimized agents on 50+ projects — from online stores with 100,000 products to Bitrix24 corporate portals. Our methodology eliminates these issues. We migrate agents to cron, clean the queue, optimize heavy tasks, and set up monitoring. The result is stable response time without drops. The investment pays off in 2–3 months. According to the official Bitrix guide, switching to cron is the only way to completely eliminate the impact of agents on user requests. In practice, cron reduces latency by an average of 3 times compared to hitAgent. Our clients typically see a 4x improvement in agent reliability after optimization.
Diagnosis of Current State
First, we look at the real picture in the b_agent table:
SELECT NAME, ACTIVE, NEXT_EXEC, LAST_EXEC,
TIMESTAMPDIFF(MINUTE, LAST_EXEC, NOW()) AS minutes_since_last
FROM b_agent
WHERE ACTIVE = 'Y'
ORDER BY NEXT_EXEC ASC;
Agents with NEXT_EXEC in the past by hours or days are stuck agents bitrix. They constantly try to run, occupy execution slots, and block other agents in the queue. For example, on one project we found 1200 stuck records — after cleaning, response time dropped from 2.5 s to 0.8 s.
Second, we look at the execution time of heavy agents bitrix. If the search agent (CSearchIndex::IndexAgent) runs for 45 seconds and is set to run every minute, it never completes correctly and restarts before the previous instance finishes. This leads to an infinite loop and 100% CPU load.
Third, we profile the impact of agents on page response time. We enable the Bitrix debug panel or log timing via \Bitrix\Main\Diag\Debug::startTimeLabel / stopTimeLabel in init.php. A typical picture: 30–50 hits per minute lose up to 500 ms on agent execution.
| Parameter | hitAgent | Cron |
|---|---|---|
| Impact on users | +500–800 ms per hit | no impact |
| CPU load | uncontrolled | easily limited via nice |
| Queue management | FIFO with locks | parallel tasks with priorities |
| Monitoring | built-in log | integration with Zabbix/Prometheus |
How Agent Optimization Affects Site Speed?
After switching to cron and cleaning the queue, page response time becomes stable — without periodic drops. Database load decreases by 20–40% during peak times. Background tasks run predictably and independently of visitor count. More details about the agent mechanism can be found in the official documentation and on Wikipedia about cron.
Isn't Cron a Panacea?
Cron solves the problem of blocking user requests but does not fix inefficient agents by themselves. If an agent runs for 30 seconds and does so every 2 minutes, it just overloads the server outside web hits. It’s important to:
- analyze each heavy agent;
- break long-running tasks into batches;
- set priorities and monitoring.
Here is a table of typical heavy agents and their optimization:
| Agent | Problem | Solution |
|---|---|---|
| CSearchIndex::IndexAgent | Runs 30–60 minutes with 50,000 products | Limit SEARCH_ELEMENT_COUNT to 500, switch to Elasticsearch |
| CEventMessageAgent | Thousands of emails accumulate, hangs | SMTP via PHPMailer, queue via Unisender API |
| CBitrixCloudBackupAgent | 100% I/O during backup | Move to night, ionice, limit speed |
| CTaskNotifications::agent | Long notification sending in Bitrix24 | Batch processing of 100 records |
Heavy system agents: what to do with them
CSearchIndex::IndexAgent — search indexing. On a catalog of 50,000+ products, it can run for hours. Solution: limit the number of elements per run via the SEARCH_ELEMENT_COUNT parameter in the search module settings, or switch to Elasticsearch and disable the built-in search.
CEventMessageAgent — email sending. If using Bitrix's built-in mail without a queue — when thousands of emails accumulate, the agent hangs. Solution: configure SMTP via a PHPMailer-compatible transport or switch to Unisender/SendPulse API with a queue.
CBitrixCloudBackupAgent — cloud backup. Can consume all server I/O with large volumes. Move to night time, add speed limiting via ionice.
CTaskNotifications::agent (Bitrix24) — CRM notifications. With a large number of tasks, it runs long. Break into batches via a limit parameter in the agent body.
Migrating Agents to Cron: Step-by-Step Guide
- In the file
/bitrix/.settings.phpor via the admin interface (Settings → Performance), set:'agents' => [ 'value' => [ 'pull_agent_manager' => 'cron', ], ], - Add to crontab:
*/1 * * * * /usr/bin/php -f /var/www/bitrix/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1 - Verify that cron runs (add a log entry).
- Set up execution monitoring (see below).
After switching to cron, agents no longer execute in the context of web requests. Page response times even out, eliminating the characteristic "drops" in latency graphs every N seconds. An important nuance: the search agent CSearchIndex::IndexAgent when run via cron may compete with PHP-FPM for CPU. Move it to a separate cron script with nice -n 10 and time limit via timeout.
Queue Optimization and Priorities
After switching to cron, we clean up the accumulated backlog:
- Cleaning stuck agents (b_agent cleanup). Agents with
NEXT_EXEColder than a day and without successfulLAST_EXECin the last 48 hours are candidates for deactivation or recreation. For each, we check: is the module alive, does the function exist, are there exceptions in logs. - Interval optimization.
CSearchIndex::IndexAgentwith a 30-second interval when actual execution time is 20 seconds — a schedule for disaster. We recalculate intervals based on actual run time plus a 50% buffer. - Staggering heavy agents. If several heavy agents (1C synchronization, email mailings, price recalculation) are set to run simultaneously, we spread their start via
NEXT_EXECwith 5–10 minute intervals. - Execution monitoring. We add logging to custom agents:
function MyHeavyAgent(): string
{
$start = microtime(true);
// ... logic ...
$elapsed = microtime(true) - $start;
if ($elapsed > 10) {
\Bitrix\Main\Diag\Debug::writeToFile(
"MyHeavyAgent took {$elapsed}s",
'',
'/bitrix/logs/agent_performance.log'
);
}
return 'MyHeavyAgent();';
}
Setting Up Agent Monitoring
We add a metric for the count of stuck agents to Zabbix/Prometheus:
SELECT COUNT(*) as stuck_agents
FROM b_agent
WHERE ACTIVE = 'Y'
AND NEXT_EXEC < DATE_SUB(NOW(), INTERVAL 1 HOUR);
If the value > 0 for more than 30 minutes, an alert goes to Telegram/Slack. This is an early indicator of cron problems or server overload. For example, on one project, an alert triggered at 50 stuck agents — after analysis, we found that cron was not running due to an error in crontab.
What’s Included in the Work
Our turnkey service includes:
- Full agent diagnosis with detailed report (documentation of each agent's status).
- Migration to cron with individual scheduling, including cron setup bitrix.
- Optimization of heavy agents (caching, batch processing).
- Setting up agent monitoring (Zabbix/Prometheus, alerts to Telegram).
- Access to monitoring dashboard with weekly performance reports.
- One-hour training session for your team on agent maintenance.
- 90-day guarantee on results with continuous support.
We estimate project completion in 5–7 business days. Contact us for a free project assessment.
Results and Guarantee
Migrating to cron and optimizing the agent queue eliminates periodic response time drops, reduces database load by 20–40% during peaks, and ensures predictable background task execution without affecting user requests. Typical clients save $1,200 per month in server costs after optimization. The investment pays back in 2–3 months. Our approach is 5 times more reliable than standard agent handling. Order an audit today — we'll provide a free estimate of your project.







