Junhyeog Lee
05/20/2026, 7:30 AMRocky
05/20/2026, 7:30 AMbash
cat /proc/cpuinfo | grep avx2
2. Java (JDK): The Frontend (FE) requires a Java runtime.
* For StarRocks v3.5 and later (including v4.x), you must use JDK 17 or later.
* StarRocks does not support JRE; the full JDK is required.
3. System Limits (ulimit): You must increase the maximum file descriptors and processes. Typical production settings include:
bash
# /etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
* soft nproc 65535
* hard nproc 65535
4. Architecture: If you are using ARM64 (e.g., AWS Graviton), you may need to compile the binaries yourself or use specific ARM builds, as the standard release tarballs are often optimized for x86_64.
Deployment Method
You can download the official tarballs from the StarRocks Download page and follow the Manual Deployment guides in the documentation for either Shared-nothing or Shared-data architectures.
References
• deployment/deployment_prerequisites.md
• developers/build-starrocks/build_starrocks_on_ubuntu.md
• developers/build-starrocks/Build_in_docker.md
• deployment/environment_configurations.md
• faq/Deploy_faq.mdJunhyeog Lee
05/20/2026, 7:36 AMRocky
05/20/2026, 7:36 AMulimits, and configuring sysctl for memory overcommit). These are more straightforward to manage and verify on a native host than inside a container.
* Standard Practice: The official production deployment guide lists "Manual Deployment" as the primary option for shared-nothing clusters on physical hardware.
2. Kubernetes (Operator) – Recommended for Orchestration
If your organization requires containerization for production, the recommended approach is to use the StarRocks Operator on Kubernetes rather than standalone Docker.
* Automation: The Operator handles complex lifecycle tasks like rolling upgrades, scaling, and health monitoring, which you would otherwise have to manage manually with standalone Docker.
* Best of Both Worlds: When configured correctly (e.g., using hostNetwork: true and local PVs), Kubernetes can provide near-bare-metal performance with the operational benefits of containers.
When should you use standalone Docker?
Standalone Docker (via docker run or docker-compose) is excellent for:
* Development & Testing: Quickly spinning up an environment on a laptop.
* Proof of Concept (PoC): Evaluating StarRocks features without needing a full cluster setup.
* Non-Performance-Critical Tasks: Small-scale environments where ease of deployment is more important than absolute performance.
Summary: For a high-performance production cluster on Rocky Linux 9 or Ubuntu 26.04, you should deploy manually using the native binaries unless you have an existing Kubernetes infrastructure.
References
• faq/Deploy_faq.md
• quick_start/shared-nothing.md
• deployment/deployment_overview.md
• developers/development-environment/dev-env-setup.md
• deployment/environment_configurations.mdJunhyeog Lee
05/20/2026, 7:37 AMRocky
05/20/2026, 7:37 AMnumactl, using it is highly recommended for bare metal deployments on multi-socket servers.
Because StarRocks is currently not NUMA-aware, it does not internally optimize for memory locality across different CPU sockets. This can lead to two main performance issues:
1. Remote Memory Latency: A thread running on CPU socket 0 might frequently access memory residing on socket 1, which is significantly slower than local access.
2. Memory Imbalance: The OS might allocate memory primarily from one NUMA node until it is full, triggering aggressive reclamation or swapping while other nodes have plenty of free memory.
Recommended Approaches
Depending on your hardware and operational complexity, there are two common ways to use numactl with StarRocks Backend (BE):
1. The "Interleave" Strategy (Easiest)
This is the most common recommendation for systems that are not NUMA-aware. It instructs the OS to spread memory allocations evenly across all available NUMA nodes.
* How to run:
bash
numactl --interleave=all ./bin/starrocks_be --daemon
* Benefit: Prevents a single NUMA node from becoming a bottleneck or running out of memory prematurely. It provides a more predictable, though not perfectly local, performance profile.
2. The "Multi-Instance" Strategy (Best Performance)
If you have a very large machine (e.g., 2 sockets with 64 cores each), you can achieve better performance by running one BE instance per NUMA node.
* How to run: You would configure two separate BE directories and bind each to a socket and its local memory:
bash
# Instance 1 pinned to Node 0
numactl --cpunodebind=0 --membind=0 ./be_1/bin/starrocks_be --daemon
# Instance 2 pinned to Node 1
numactl --cpunodebind=1 --membind=1 ./be_2/bin/starrocks_be --daemon
* Benefit: Ensures 100% memory locality for each process.
* Trade-off: Increases management complexity (you must manage multiple BE ports and configurations) and divides the BE's internal caches (like PageCache).
Summary Recommendation
* For most users: Use numactl --interleave=all. It provides a significant safety net against memory imbalances with zero configuration changes.
* For performance enthusiasts: If your benchmarks show cross-socket latency is a bottleneck, consider the multi-instance approach.
Note: Ensure numactl is installed on your Rocky Linux or Ubuntu host (sudo yum install numactl or sudo apt install numactl).
References
• administration/management/BE_configuration.md
• deployment/plan_cluster.md
• faq/Others.md
• administration/management/resource_management/Memory_management.md
• deployment/deployment_overview.md
References
• deployment/plan_cluster.md
• administration/management/resource_management/Memory_management.md
• administration/management/BE_configuration.mdJunhyeog Lee
05/20/2026, 7:43 AMRocky
05/20/2026, 7:43 AMmem_limit | 90% (Default) | 45% per instance
storage_page_cache_limit | 20% (Default) | 10% per instance
be_port | 9060 | BE1: 9060, BE2: 19060
storage_root_path | /data/storage | BE1: /data1, BE2: /data2
Summary: Is it worth it?
* The Benefit: You get better NUMA locality. Threads on Socket 0 only access memory on Socket 0, which is much faster.
* The Cost: You lose cache flexibility. You have to manage more configuration files and potentially deal with slightly lower "hit rates" because the cache is split into smaller, rigid pools.
If your machine has more than 64 cores or multiple physical CPU sockets, the performance gain from NUMA locality usually outweighs the slight loss in cache efficiency. For smaller machines, a single instance is almost always better.
References
• deployment/deploy_manually.md
• faq/Others.md
• faq/Deploy_faq.md
• deployment/plan_cluster.md
• deployment/upgrade.md
• deployment/downgrade.mdJunhyeog Lee
05/20/2026, 8:18 AMRocky
05/20/2026, 8:18 AMBACKUP and RESTORE operations. Instead, throttling is achieved by controlling the concurrency of tasks and threads.
By reducing the number of parallel workers, you effectively reduce the network, disk I/O, and CPU pressure these operations exert on the cluster.
1. Throttling via BE Configurations
You can limit the number of threads performing the actual data transfer (upload/download) on each Backend node in `be.conf`:
* For BACKUP: upload_worker_count
* Default: 0 (automatically set to the number of CPU cores).
* To Throttle: Set this to a small fixed value (e.g., 1 or 2) to limit how many files a BE uploads to remote storage (S3/HDFS) simultaneously.
* For RESTORE: download_worker_count
* Default: 0 (automatically set to the number of CPU cores).
* To Throttle: Set this to a small value to limit concurrent downloads from the repository.
* Snapshot Concurrency: make_snapshot_worker_count (Default: 5) controls the threads creating the local data snapshots before the upload starts.
2. Throttling via FE Configurations
You can also limit how many total tasks the Frontend (FE) assigns to each BE for a single job by modifying these dynamic FE parameters (using ADMIN SET FRONTEND CONFIG):
* max_upload_task_per_be: The maximum number of upload tasks assigned to a BE node in a single BACKUP operation.
* max_download_task_per_be: The maximum number of download tasks assigned to a BE node in a single RESTORE operation.
Recommended Strategy
Because there is no "hard speed limit," the best practice is to:
1. Schedule during off-peak hours: StarRocks documentation explicitly recommends running these jobs when the cluster is not heavily loaded.
2. Start with low concurrency: If you are worried about network saturation, set upload_worker_count and download_worker_count to 1 or 2 and monitor the impact before increasing.
3. Monitor Network I/O: Use system tools (like nload or iftop) to observe the actual throughput when these worker counts are adjusted.
References
• administration/management/BE_configuration.md
• administration/management/Backup_and_restore.md
• administration/management/FE_configuration.md
• faq/operation_maintenance_faq.md
References
• administration/management/BE_configuration.md
• administration/management/Backup_and_restore.md
• administration/management/FE_configuration.md