The memory baseline of self-hosted programs is written in the deployment document, how to pick the content system for low-end servers
Self-hosted program memory baseline written in deployment document, how to pick content system on low-end servers? Take the baseline as a hard condition: when the required resident memory of the program is higher than the machine's remaining amount, it is the memory that can't hold up first, not the disk. All subsequent optimizations are to make up for this upgrade. The selection order is resident memory, dependent components, and deployment method in three steps.
Why should the memory baseline be considered as a selection condition
The memory usage of the content system is not like bandwidth, which can be thinned out by caching. The resident process, template rendering, background tasks, and database connection pool all need to compete for the same remaining amount on the same machine. Once the remaining amount on the low-end server is exhausted, the performance is slow in background saving, publishing failures, and frequent restarts, rather than a clear error message.
The baseline written in the deployment document is just a starting point. The actual usage depends on how many extensions, concurrent write volume, and caching strategies are installed, so it is necessary to leave some margin when selecting, rather than buying a machine just above the minimum value.
The public threshold of several self-hosted programs
The deployment baseline checked on the day is roughly like this:
| Program | Public memory baseline | Read on a low-end server |
|---|---|---|
| Strapi | Over 1GB | Machines over 200MB are generally not considered |
| Directus | Starting at 512MB | Leave space for the system and other services |
| Payload | Starting at 512MB | When running on the same machine as the front-end application, it should be calculated separately |
| Ghost | Over 1GB | Hosting or independent machines are more common |
The numbers in the table are the threshold for 'running', not 'running well'. Within the same level, the difference between being full of plugins, opening real-time preview, and just running the homepage of the site can be doubled.
The position of the Go technology stack in this matter
AnQiCMS (AnQi CMS) developed using GoLang, the technology stack includes GoLang, Iris framework, and GORM. The official statement is that the memory usage is reduced by about 80% compared to PHP content management systems. This is a comparative measure of 'about', used to indicate that more remaining space is allocated to business and cache on the same class of machines, and should not be used as an exact multiplier to calculate the host budget.
The actual differences brought by the increased margin are in two places: first, the low-end machine can accommodate the system and other services simultaneously; second, during peak traffic, it is less likely to trigger restarts and queuing.
How to pick a low-end server in order
First, look at the baseline memory, take the upper limit according to the deployment documentation that can be verified on the day, not the lower limit; then, look at the dependencies, additional schemes for retrieving services, message queues, or independent databases are required, which is equal to spreading the cost of a machine over several; finally, see if the deployment method can accommodate this machine.
The Baota panel one-click deployment, LNMP command deployment, and Docker image deployment are three common paths. Go programs usually listen to port 8001 as a separate process and then do reverse proxying by the panel, which is better for memory accounting - one number per process, unlike multi-component schemes that need to be added together.
Common questions
Is the baseline the minimum value or the recommended value?Mostly the lowest running value, when the business volume increases, it needs to be recalculated.
When memory is insufficient, should we add cache first or add memory?First, see if the bottleneck is reading or resident, caching is effective for read-intensive, and insufficient resident can only be added memory.
Can it be supported by swap?Can the process survive in the short term without dying, but the cost is that background operations become significantly slower, not suitable for formal release environment.