Skip to main content

Goal: fast and stable WordPress on SpinupWP (Bricks + many plugins + large uploads) ✅

❓ I use SpinupWP, and it allows you to configure the following settings. Please explain these settings to me and recommend what I should set: I’ll be using BricksBuilder and a whole range of other plugins. I also want to upload large files and edit large pages (a lot of content on a single page). My goal is to achieve excellent performance and stability.

Nginx

  • Client Max Body Size

  • Client Body Timeout

  • FastCGI Read Timeout

PHP

  • Upload Max File Size

  • Post Max Size

  • Memory Limit

  • Max Execution Time

  • Max File Uploads

  • Max Input Vars

  • Max Input Time

  • Worker Management

    • Static

      • Max Workers

      • Max Requests

    • Dynamic

      • Max Workers

      • Max Requests

      • Start Workers

      • Mind Idle Workers

      • Max Idle Workers

    • On-Demand

      • Max Workers

      • Max Requests

      • Idel Worker Timeout

SpinupWP is essentially letting you tune two layers:

  1. Nginx (the web server): controls request size limits and how long it will wait for data.

  2. PHP-FPM (PHP workers): controls how much PHP can consume per request and how many requests can run concurrently.

Below is what each setting does and what I’d set as a strong default for a “performance + stability” Bricks/WordPress site that also needs large uploads and large admin edits. (You can tighten later once you know your real needs.)


Nginx settings

1) Client Max Body Size

  • What it is: Maximum allowed size of an HTTP request body (uploads, big POST requests, some editor saves).

  • If too low: Uploads fail with 413 Request Entity Too Large.

  • Trade-off: Higher values allow bigger uploads, but also increase abuse potential (someone can try to send huge bodies).

Recommendation

  • Set to the largest file you realistically upload, with buffer.

    • Typical “safe but flexible”: 256M

    • If you truly upload big media/backups via WP: 512M (or 1G if you must)

  • If you’re using direct-to-object-storage uploads (S3, etc.), you can keep it lower.


2) Client Body Timeout

  • What it is: How long Nginx will wait to receive the request body from the client (e.g., slow upload connection).

  • If too low: Large uploads over slow connections fail mid-way (timeout).

  • Trade-off: Too high can keep connections open longer (slightly more exposure to slowloris-style behavior, though Nginx is good at handling this).

Recommendation

  • 120s–300s

    • Start at 300s if you regularly upload large files from typical home/office connections.


3) FastCGI Read Timeout

  • What it is: How long Nginx will wait for a response from PHP (via PHP-FPM).

  • If too low: Long operations (imports, image processing, complex saves) fail with 504 Gateway Timeout.

  • Trade-off: Too high can allow truly “stuck” PHP requests to tie up capacity longer.

Recommendation

  • 120s–300s

    • Start at 300s if you do imports, big edits, or heavy plugins.

    • For normal sites with no long operations, you’d keep it closer to 60–120s.


PHP (runtime) settings

4) Upload Max File Size (upload_max_filesize)

  • What it is: Max size for a single uploaded file handled by PHP.

  • If too low: WP media uploads fail.

Recommendation

  • Set based on your real uploads:

    • Common: 256M

    • Heavy media workflows: 512M

  • Must be ≤ Post Max Size (below).


5) Post Max Size (post_max_size)

  • What it is: Max size of the entire POST request (can include multiple files + form fields + editor payload).

  • If too low: Uploads or large editor saves can fail even if upload_max_filesize is high enough.

Recommendation

  • Set to a bit higher than upload_max_filesize:

    • If upload is 256M → post max 300M–320M

    • If upload is 512M → post max 600M–640M


6) Memory Limit (memory_limit)

  • What it is: Max memory PHP can use per request (front-end requests, WP admin, WP-Cron, AJAX, builder operations).

  • If too low: White screens, fatal errors, “Allowed memory size exhausted”, builder instability.

  • Trade-off: Higher per-request memory means fewer concurrent requests fit in RAM (important when combined with PHP worker count).

Recommendation (Bricks + plugins + big pages)

  • Start at 512M

  • If you see memory-related fatals or heavy Woo/ACF/SEO stacks: 768M (or 1024M only if you truly need it and have RAM headroom)

Stability tip: it’s usually better to run fewer PHP workers with enough memory than many workers that cause swapping/oom.


7) Max Execution Time (max_execution_time)

  • What it is: Max CPU time a PHP script is allowed to run.

  • If too low: Imports, backups, resizing, and some builder operations can fail.

  • Trade-off: Too high lets inefficient tasks run longer and hold workers.

Recommendation

  • 120s–300s

    • Start at 300s if you do imports/large operations.

    • If you don’t, 120s is often plenty.


8) Max File Uploads (max_file_uploads)

  • What it is: Max number of files that can be uploaded in one request.

  • If too low: Multi-file upload UIs may fail or partially upload.

Recommendation

  • 50 (safe default)

  • If you never bulk upload huge batches: 20 is fine.


9) Max Input Vars (max_input_vars)

  • What it is: Limits how many input fields PHP will accept (forms, page builder payloads, mega menus, complex admin screens).

  • If too low: Settings don’t save completely; missing fields; builder content or meta boxes not persisting.

  • Trade-off: Higher values slightly increase parsing overhead and can be abused (but typically fine behind WP auth).

Recommendation (large builder pages)

  • Start at 10,000

  • If you have extremely large pages / many dynamic fields: 20,000

  • Avoid absurdly high numbers unless you need them.


10) Max Input Time (max_input_time)

  • What it is: Time limit for PHP to parse input data (POST/GET/file uploads).

  • If too low: Large POST payloads (big editor saves) can fail.

Recommendation

  • 120s–300s

    • Start at 300s for your use case.


PHP-FPM Worker Management (this is the big performance/stability lever)

PHP-FPM runs a pool of PHP “workers.” Each concurrent uncached request generally needs a worker. More workers = more concurrency, but also more RAM usage. Too many workers = memory pressure → swapping → slow site → crashes.

Choosing the mode: Static vs Dynamic vs On-Demand

  1. Static

    • Always keeps exactly Max Workers running.

    • Best for predictable, steady traffic and lowest latency.

    • Can waste RAM on quiet sites.

  2. Dynamic (usually best general-purpose choice) 🌿

    • Keeps a baseline and scales up/down with demand.

    • Great balance of responsiveness and RAM efficiency.

  3. On-Demand

    • Starts workers only when needed; kills them after idle timeout.

    • Efficient for very low traffic.

    • Slight latency spikes as workers spawn; can feel worse in WP admin if constantly cold-starting.

Recommendation

  • Use Dynamic for “excellent performance + stability” on a typical production WP server.


Worker parameters (what they mean + what to set)

A) Max Workers (pm.max_children)

  • What it is: Maximum number of PHP requests that can run at the same time.

  • If too low: Requests queue → slow TTFB under load, admin feels laggy when multiple users.

  • If too high: RAM exhaustion → swapping/oom → site instability.

How to size it (rule of thumb)

  • Estimate average memory per PHP worker under your workload:

    • many WP sites: 80–200MB per worker

    • heavy builders/admin ops can spike higher

  • Then ensure: max_workers × (avg worker RAM) fits comfortably in available RAM after OS + Nginx + DB + caches.

Recommendation (practical starting points)

  • If your server is 2GB RAM: 4–6 workers

  • 4GB RAM: 6–12 workers

  • 8GB RAM: 12–24 workers

  • If you set memory_limit=512M, do not assume each worker uses 512M—but plan conservatively.


B) Max Requests (pm.max_requests)

  • What it is: How many requests a worker handles before it’s recycled.

  • Why it matters: Mitigates memory leaks/fragmentation from plugins/themes over time.

  • Trade-off: Too low = more respawns (minor overhead).

Recommendation

  • 500–1000

    • Start at 500 if you run lots of plugins and want stability.

    • Use 1000 if everything is stable and you want slightly fewer respawns.


Dynamic mode-specific

C) Start Workers (pm.start_servers)

  • What it is: Workers spawned on PHP-FPM start/reload.

  • Recommendation

  • Set to about 25–50% of Max Workers

    • Example: max 12 → start 4–6

D) Min Idle Workers (pm.min_spare_servers)

  • What it is: Minimum number of idle workers to keep ready.

  • Recommendation

  • About 15–30% of Max Workers

    • Example: max 12 → min idle 2–4

E) Max Idle Workers (pm.max_spare_servers)

  • What it is: Maximum idle workers to keep around.

  • Recommendation

  • About 50–70% of Max Workers

    • Example: max 12 → max idle 6–8


On-Demand mode-specific

F) Idle Worker Timeout (pm.process_idle_timeout)

  • What it is: How long an idle worker lives before it’s killed.

  • Recommendation

  • 10s–30s

    • For WP admin comfort, lean 30s

    • For ultra-low-traffic efficiency, 10s–15s


Suggested “strong baseline” config (most Bricks sites)

Use this as a starting point, then adjust based on real usage. 📌

Nginx

  1. Client Max Body Size: 512M

  2. Client Body Timeout: 300s

  3. FastCGI Read Timeout: 300s

PHP

  1. Upload Max File Size: 512M

  2. Post Max Size: 640M

  3. Memory Limit: 512M (go 768M if you hit memory fatals)

  4. Max Execution Time: 300

  5. Max File Uploads: 50

  6. Max Input Vars: 10,000 (20,000 if large builder pages still don’t save fully)

  7. Max Input Time: 300

PHP-FPM (Dynamic)

  • Max Workers: depends on RAM:

    • 4GB RAM → 10

    • 8GB RAM → 18

  • Max Requests: 500

  • Start Workers: ~40% of max

  • Min Idle Workers: ~20% of max

  • Max Idle Workers: ~60% of max

Concrete examples:

  1. If 4GB RAM

    1. Max Workers: 10

    2. Max Requests: 500

    3. Start Workers: 4

    4. Min Idle Workers: 2

    5. Max Idle Workers: 6

  2. If 8GB RAM

    1. Max Workers: 18

    2. Max Requests: 500

    3. Start Workers: 6

    4. Min Idle Workers: 3

    5. Max Idle Workers: 10


Two quick guardrails (important for “stability”)

  1. Don’t oversubscribe workers

    • If you see swapping (disk activity high, load average high, site suddenly slow), reduce Max Workers first.

  2. Make sure limits agree

    • client_max_body_size (Nginx) must be post_max_size (PHP) must be upload_max_filesize (PHP), otherwise you get confusing failures.


If you tell me these 4 details, I can give a precise worker count ⚙️

  1. Server RAM (and whether DB is on the same server)

  2. CPU cores

  3. Traffic level (avg + peak concurrent visitors)

  4. Whether you run WooCommerce / membership / heavy search/filter plugins

I’ll then recommend an exact Dynamic worker configuration sized to your hardware and workload.