You're in the ACP Group Bitrix24 Knowledge Base Main site acp-24.com →
ACP Group ACP Group Bitrix24 Gold Partner Knowledge Base
EN PT
+971 55 780 1481
Integrations & Tech

Self-Hosted Bitrix24 Performance Tuning: Make Your Portal Fast

Published: ·By Vadim Armizonov, Head of Implementation·Updated: ·14 min read

A slow self-hosted Bitrix24 portal almost always traces back to one of four root causes: under-provisioned hardware, an untuned PHP runtime, a misconfigured database, or disabled caching layers. Fix those, and response times routinely drop from several seconds to under one second.

Vadim Armizonov, Head of Implementation · ACP Group. Shares hands-on experience from similar Bitrix24 (Alaio) projects delivered at ACP Group.

Why Self-Hosted Portals Slow Down

The most common performance killers on a self-hosted Bitrix24 (Alaio) are preventable: wrong PHP version, disabled OPcache, an undersized InnoDB buffer pool, and caching layers left at their defaults - any one of them can double page-load times under real user load.

Unlike the cloud edition, on-premise deployments hand you full control of the stack - but that means every bottleneck is also your responsibility. Based on ACP Group's experience across 1,300+ Bitrix24 projects, slowdowns cluster around a predictable set of culprits:

  • PHP running below version 8.2 (or with OPcache off)
  • MySQL innodb_buffer_pool_size sized for a dev box, not production
  • Managed cache and HTML cache disabled in the Bitrix performance panel
  • Composite site mode turned off on public-facing pages
  • Push & Pull server not configured, causing realtime features to poll on short intervals
  • Static files served by PHP instead of the web server
  • Modified core files that prevent updates and introduce unpredictable overhead
  • Disk I/O contention when database files live on spinning HDD rather than SSD

The sections below address each layer in sequence, from hardware through application-level caching.


Right-Sizing Server Hardware

Match CPU, RAM, and storage tier to your actual concurrent user count before touching any software setting - under-provisioned hardware makes every other tuning effort irrelevant.

Bitrix24's own load-test data and field experience point to the following comfortable baseline configurations (as of 2026):

Users CPU RAM Storage recommendation
Up to 50 4-core Xeon, ~3.4 GHz 8-12 GB DDR4 SSD for DB files
50-100 4-core Xeon, ~3.4 GHz 16-24 GB DDR4 SSD for DB files
100-500 8-core Xeon, ~3.2 GHz 32 GB DDR4 SSD for DB + HDD for portal files
500-1,000 12-core Xeon 64 GB DDR4 SSD for DB + HDD for portal files
1,000-5,000 12-core Xeon 128 GB DDR4 NVMe/SSD for DB
5,000+ 2 × 12-core Xeon 128 GB DDR4 per node Cluster - see below

Key hardware rules:

  • Database files must be on SSD (or NVMe). Spinning HDD for InnoDB data causes severe I/O wait under concurrent load.
  • Portal/upload files can live on HDD to reduce cost, but separate the volumes.
  • Minimum RAM for any production portal is 16 GB - the 2 GB minimum in the spec sheet is for installation only.
  • For 1,000+ users, a two-tier cluster (dedicated DB servers + application servers) is the standard path. Load-test results from an Enterprise cluster showed sub-1-second response for thousands of concurrent sessions using two application servers and two database servers.

For a detailed sizing reference, see Self-Hosted Bitrix24: Hardware Sizing Guide for 50 to 1,000 Users.


PHP Runtime: Version and OPcache

Run PHP 8.2 at minimum - it is the hard floor for Bitrix24 updates as of 2026 - and enable OPcache; without it, every page request recompiles every file from source, typically adding 300-800 ms of pure CPU time.

Version requirements

  • Minimum: PHP 8.2 (enforced since 1 March 2024; portals on older versions cannot receive platform updates)
  • Recommended: PHP 8.3 or the latest stable release
  • PHP 8.1 reached end-of-life upstream and receives no security fixes

Required extensions

Extension Purpose
OPcache Bytecode cache - eliminates recompilation
GD Charts, CAPTCHA, image processing
PHP XML Update system
FreeType CAPTCHA rendering
Zlib Compression for updates and responses
mbstring Multi-byte string handling (set mbstring.func_overload=0)

Critical php.ini settings

memory_limit = 256M
default_charset = UTF-8
mbstring.func_overload = 0
session.use_trans_sid = 0
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 60

Note: mbstring.func_overload must be exactly 0. Any other value blocks platform updates and causes unpredictable string-handling bugs. This is a common legacy misconfiguration found during audits.

Upgrade path

  1. Back up the entire installation (database + files).
  2. Update all platform modules and Marketplace solutions to latest versions.
  3. Change the PHP version in your server environment (or via the VMBitrix menu: Manage servers → Update PHP and MySQL).
  4. Re-run the update check after the PHP upgrade.

Database Tuning (MySQL / MariaDB)

The single highest-impact database change is sizing innodb_buffer_pool_size to 60-70 % of available RAM - this keeps the working dataset in memory and eliminates most random-read I/O on the database server.

Bitrix24 works with MySQL 8.x (Percona Server recommended) or MariaDB. PostgreSQL is supported only on the Enterprise for Postgres license. Oracle and MSSQL are not supported.

Key parameters to review

Parameter Common misconfiguration Recommended direction
innodb_buffer_pool_size Default 128 MB 60-70 % of DB server RAM (e.g., 34 GB on a 48 GB server)
innodb_log_file_size 64 MB (too small) 1-2 GB for write-heavy workloads
query_cache_type Enabled Disable - query cache causes contention under concurrency
local_infile ON Set to OFF (security + performance)
sync_binlog 1 Increase to 1000 for non-critical replicas to reduce fsync overhead
max_connections Default 151 Set based on actual concurrent users (load tests used 305+)
max_heap_table_size Default 256 MB for in-memory temp tables
join_buffer_size 32 MB Tune down to 4-8 MB per connection (large values waste RAM)
sort_buffer_size 32 MB Tune down to 4-8 MB per connection

Slow query log

Enable the slow query log (slow_query_log = ON, long_query_time = 1) during a representative working period, then review the output. In typical projects, 80 % of query time comes from fewer than 10 query patterns - usually missing indexes on CRM entity tables or unoptimised custom modules.


Bitrix24 Caching Layers

Bitrix24 ships with three distinct caching tiers - managed cache, HTML cache, and composite mode - and leaving all three at defaults is the fastest free performance win available to any self-hosted portal.

A request flows through the caching stack before reaching PHP and the database.

flowchart LR
    BROWSER[Browser / Client] --> WEBSERVER[nginx / Apache]
    WEBSERVER -->|Static file hit| STATIC[Static File Cache\nlong expires + CDN]
    WEBSERVER -->|Composite page hit| COMPOSITE[Composite Mode\nFull-page HTML snapshot]
    COMPOSITE -->|Cache miss| PHP[PHP 8.2+ / OPcache]
    WEBSERVER -->|Dynamic request| PHP
    PHP -->|HTML cache hit| HTMLCACHE[HTML Cache\nPage fragment cache]
    HTMLCACHE -->|Cache miss| MANAGED[Managed Cache\nMemcached / Redis]
    MANAGED -->|Cache miss| DB[(MySQL / MariaDB\nInnoDB buffer pool)]
    PHP --> PUSHPULL[Push & Pull Server\nRealtime events]

Managed cache (Memcached / Redis)

Enable in Settings → Performance → Caching. Managed cache stores computed PHP objects - user sessions, CRM entity lookups, permission matrices - so they are not recalculated on every request. For portals with more than 100 users, allocate at least 512 MB of dedicated cache memory.

HTML cache

HTML cache stores rendered page fragments. Enable per-component or globally. Particularly effective for intranet news feeds, workgroup pages, and CRM list views that do not change on every load.

Composite site mode

Composite mode generates a full static HTML snapshot of a page and serves it instantly to returning visitors, with only dynamic widgets loaded asynchronously. It is most impactful for public-facing Bitrix24 sites and portals with many anonymous or lightly-personalised pages.

Built-in performance panel

Navigate to Settings → Performance in the admin panel. This panel shows cache hit rates, slow component timings, and flags common misconfigurations. Review it before making any other change - it often surfaces the highest-impact issue within seconds.


Push & Pull Server: Realtime Without Polling

Without a properly configured Push & Pull server, every Bitrix24 realtime feature - chats, task updates, telephony, calendars - falls back to short-interval HTTP polling, generating 5-20× more database and PHP load than a properly configured push connection.

As of early 2021, Push & Pull is mandatory for the web messenger module. The supported options are:

  • Bitrix Push Server 2.0 (local, self-hosted on the same or a dedicated server) - recommended for on-premise deployments with data-sovereignty requirements
  • Bitrix24 cloud push - simpler to configure but routes realtime traffic through an external server

Older push server versions (Nginx-PushStreamModule 0.3.4/0.4.0 and Bitrix Push Server 1.0) are no longer supported. If you are running either, migrate to Push Server 2.0 immediately.

Push & Pull serves: chats, tasks, calendars, news feed, workgroups, RPA, mobile app, telephony, sales centre, document generator.

Configure at: Settings → Product settings → Module settings → Push and Pull.


Static Files, Long Expires, and CDN

Serving static assets (JS, CSS, images) with long Cache-Control: max-age headers and offloading them to a CDN removes the single largest share of repeated load from your application server - typically 60-80 % of HTTP requests by count.

Recommendations:

  • Configure nginx to serve all /bitrix/js/, /bitrix/css/, /upload/, and /bitrix/images/ paths directly, bypassing PHP entirely.
  • Set Cache-Control: max-age=31536000, immutable for versioned assets.
  • Enable Gzip or Brotli compression on the web server for all text assets.
  • For portals with geographically distributed users (common in MENA and international deployments), put a CDN in front of static paths. The dynamic portal itself stays on-premise; only static files are edge-cached.
  • Use the Bitrix24 site-boost settings (Optimize page load time and Defer image loading) for any public-facing Bitrix24 site - these defer non-critical rendering and lazy-load off-screen images without code changes.

Common Bottlenecks: Symptoms, Causes, and Fixes

Use this table as a first-response diagnostic when users report slowness - matching the symptom to the right layer saves hours of unfocused investigation.

Symptom Likely cause Fix
All pages slow, high CPU on web server OPcache disabled or misconfigured Enable OPcache; set opcache.memory_consumption ≥ 256
Slow CRM list and deal pages only Missing DB indexes; large InnoDB buffer pool miss Enable slow query log; increase innodb_buffer_pool_size
Chats / tasks not updating in realtime, high DB load Push & Pull server not configured Install and configure Bitrix Push Server 2.0
Slow first load, fast subsequent loads HTML cache or composite mode disabled Enable HTML cache; enable composite mode for static-heavy pages
High disk I/O wait on DB server Database files on HDD Migrate DB data directory to SSD/NVMe
Portal slow only for remote/international users No CDN; large uncompressed assets Add CDN for static; enable Gzip/Brotli on web server
Updates fail; PHP warnings in logs mbstring.func_overload ≠ 0; PHP < 8.2 Set mbstring.func_overload=0; upgrade PHP to 8.2+
Intermittent slowness after custom development Modified core files causing conflicts Audit core modifications; move logic to custom modules
Memory exhausted errors memory_limit too low Set memory_limit = 256M (minimum) in php.ini
Slow file uploads / drive operations Upload directory on slow storage Move /upload/ to SSD-backed volume

Performance Quick-Wins Checklist

Run through this checklist on any slow portal before engaging in deeper investigation - in ACP Group's audit practice, at least half of performance complaints are resolved by items in this list alone.

✅ PHP layer

  • PHP version is 8.2 or higher (8.3 recommended as of 2026)
  • OPcache is enabled with ≥ 256 MB memory and opcache.max_accelerated_files ≥ 20000
  • memory_limit = 256M or higher in php.ini
  • mbstring.func_overload = 0 confirmed
  • session.use_trans_sid = 0 confirmed

✅ Database layer

  • MySQL 8.x / Percona Server (or MariaDB equivalent) in use
  • innodb_buffer_pool_size set to 60-70 % of DB server RAM
  • innodb_log_file_size ≥ 1 GB
  • Query cache disabled (query_cache_type = 0)
  • local_infile = OFF
  • Slow query log enabled and reviewed
  • Database files on SSD/NVMe storage

✅ Bitrix24 caching

  • Managed cache (Memcached/Redis) enabled in Performance panel
  • HTML cache enabled for high-traffic components
  • Composite mode enabled for public/semi-static pages
  • Performance panel reviewed for flagged issues

✅ Realtime and push

  • Push & Pull server configured (Bitrix Push Server 2.0 or cloud)
  • No legacy push server versions (0.3.x or 1.0) in use

✅ Web server and static files

  • nginx (or Apache) serves static paths directly, bypassing PHP
  • Cache-Control: max-age set for static assets
  • Gzip or Brotli compression enabled
  • CDN in front of static assets (for distributed or international teams)
  • Site-boost options (optimize load time + lazy image loading) enabled on public sites

✅ Hardware and OS

  • Server RAM meets the sizing table for your user count
  • DB volume is on SSD; portal files may be on HDD
  • TCP socket reuse settings tuned for high-concurrency (tcp_tw_reuse)

✅ Code and customisation

  • Core file modification audit run (built-in Quality Monitor tool)
  • Modified core files documented and planned for migration to custom modules
  • All third-party Marketplace solutions updated to latest versions

When to Call in an Expert

If the checklist above does not resolve the slowdown, the bottleneck is almost always either a deep database query pattern from custom code or an architectural constraint - both require profiling tools and portal-specific knowledge to diagnose quickly.

Signs that a structured audit is worthwhile:

  • Response time is above 2 seconds for standard CRM operations after basic tuning
  • Slowness only appears under concurrent load (20+ simultaneous users), not in isolation
  • Core files have been modified and cannot be cleanly updated
  • The portal is approaching a user-count tier that requires a cluster topology

ACP Group, a Bitrix24 Gold partner with 1,300+ completed projects, offers performance audits that cover the full stack: hardware sizing, PHP/DB configuration, caching architecture, and custom-code profiling. The Self-Hosted Bitrix24 High Availability guide covers the cluster path for portals that have outgrown a single server.

For context on the broader decision between cloud and on-premise, see Self-Hosted vs Cloud Bitrix24: Complete 3-Year TCO Analysis and Self-Hosted Bitrix24 Security Hardening: 25-Point Checklist for the security side of the same stack.


Working with a partner on self-hosting. Want the control of self-hosted Bitrix24 without running the server yourself? ACP Group can deploy and operate it for you - see managed self-hosted Bitrix24, support & maintenance plans, or request a turnkey deployment quote.

Frequently asked questions

What PHP version does self-hosted Bitrix24 require in 2026?

PHP 8.2 is the enforced minimum as of 1 March 2024 - portals running older versions cannot receive platform updates. PHP 8.3 is the recommended version as of 2026. Always enable OPcache alongside the version upgrade for maximum performance gain.

How do I find the biggest performance bottleneck on my Bitrix24 portal?

Start with the built-in Performance panel at Settings → Performance - it shows cache hit rates and slow component timings. Then enable the MySQL slow query log (long_query_time = 1) and review it after a representative working session. Most slowdowns trace to OPcache being off, an undersized InnoDB buffer pool, or disabled managed cache.

Do I need a separate Push & Pull server for a self-hosted Bitrix24?

Yes. Since early 2021, the web messenger module requires a configured Push & Pull server. Without it, chats, task notifications, and telephony events fall back to HTTP polling, generating far more load on the database and PHP. Use Bitrix Push Server 2.0 - older versions (0.3.x and 1.0) are no longer supported.

What is the recommended innodb_buffer_pool_size for Bitrix24?

Set it to 60-70 % of the total RAM on your database server. On a 48 GB DB server, that means roughly 32-34 GB. The default value of 128 MB is suitable only for development and will cause severe I/O wait under any real concurrent load.

Can modified Bitrix24 core files cause performance problems?

Yes. Modified core files block platform updates, can introduce unpredictable execution paths, and prevent the OPcache from working optimally across update cycles. Use the built-in Quality Monitor to audit which files have been changed, then migrate that logic to proper custom modules.

When does a single-server Bitrix24 need to become a cluster?

As a rule of thumb, plan for a two-tier cluster (dedicated application servers + dedicated database servers) when you exceed 1,000 concurrent users or when single-server tuning no longer keeps response times below one second under peak load. Bitrix24 Enterprise load tests demonstrated stable sub-1-second responses for thousands of simultaneous sessions on a four-node cluster using mid-range hardware.

Based on real practice

This article is based on 15 internal documents from ACP Group's practice - work plans, specifications and Bitrix24 implementation cases.

Need help with Bitrix24?

ACP Group is a Bitrix24 Gold Partner. We'll review your task, estimate the effort in hours and propose a plan - free of charge.

Didn't find your answer?

Ask a Bitrix24 expert

We'll run a demo, gather requirements and estimate your project in hours. First consultation is free.

+971 55 780 1481