Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Tooling and docs to optimize php using opcache, php-fpm/frankenphp

NotificationsYou must be signed in to change notification settings

eznix86/php-optimize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Two calculators to help you optimize your PHP application server configuration based on available RAM and CPU. Created for optimizing PHP applications on resource-constrained servers.

Quick Install

# Download all scriptscurl -fsSL https://raw.githubusercontent.com/eznix86/php-optimize/main/fpm.sh -o fpm.shcurl -fsSL https://raw.githubusercontent.com/eznix86/php-optimize/main/frankenphp.sh -o frankenphp.shcurl -fsSL https://raw.githubusercontent.com/eznix86/php-optimize/main/test.sh -o test.shchmod +x fpm.sh frankenphp.sh test.sh# Or with wgetwget https://raw.githubusercontent.com/eznix86/php-optimize/main/fpm.shwget https://raw.githubusercontent.com/eznix86/php-optimize/main/frankenphp.shwget https://raw.githubusercontent.com/eznix86/php-optimize/main/test.shchmod +x fpm.sh frankenphp.sh test.sh

Scripts

1.fpm.sh - PHP-FPM Calculator

For traditional PHP-FPM + Nginx/Caddy setups.

2.frankenphp.sh - FrankenPHP Calculator

For modern FrankenPHP (Caddy + PHP workers) setups.

3.test.sh - Load Testing Tool

For performance testing your configuration.


FrankenPHP Calculator (frankenphp.sh)

Usage

# Basic usage (auto-detect everything)./frankenphp.sh# Custom configuration./frankenphp.sh -r 0.2 -b 15 -m 3# Specify overhead manually./frankenphp.sh -o 250# JSON output./frankenphp.sh --json

Options

FlagDescriptionDefault
-r, --reserved <GB>RAM reserved for OS0.4 GB
-b, --buffer <PERCENT>Safety buffer percentage10%
-m, --multiplier <NUM>Workers per CPU2
-o, --overhead <MB|auto>Memory overheadauto
-p, --process-patternProcess name to match"frankenphp"
--jsonJSON outputtable

Overhead Detection (-o auto)

The script automatically detects memory overhead from:

  1. OPcache - Auto-detected fromopcache.memory_consumption
  2. Caddy/FrankenPHP runtime - Fixed estimate (~50 MB)
  3. Generic cache/database - Conservative estimate (~100 MB)

Total auto-detected overhead: Typically 150-350 MB depending on your stack

Manual Overhead Examples

# Minimal app (OPcache + Caddy only)./frankenphp.sh -o 150# Laravel + SQLite (OPcache + SQLite cache/mmap + Caddy)./frankenphp.sh -o 306# Laravel + MySQL + Redis./frankenphp.sh -o 400# Let script auto-detect (recommended)./frankenphp.sh -o auto

Overhead Breakdown by Stack (example)

StackOPcacheDatabaseCacheCaddyTotal
Minimal PHP app128 MB--50 MB~180 MB
Laravel + SQLite128 MB128 MB-50 MB~306 MB
Laravel + MySQL128 MB200 MB-50 MB~378 MB
Laravel + MySQL + Redis128 MB200 MB64 MB50 MB~442 MB

Output Example

------------------------------------------------------------FrankenPHP Worker Calculator (CLI)------------------------------------------------------------Total RAM (GB)               | 0.94Reserved RAM (GB)            | 0.20RAM Buffer (%)               | 10CPU Count                    | 1Worker Multiplier (per CPU)  | 2Worker Process (MB)          | 50.00Overhead (MB)                | 278 (auto-detected)Available RAM (GB)           | 0.67Available RAM (MB)           | 686Usable for Workers (MB)      | 408------------------------------------------------------------CPU-based workers            | 2Memory-based workers         | 8Recommended workers          | 2 (conservative)num_threads                  | 4 (2x workers)max_threads                  | 8 (burst capacity)------------------------------------------------------------Estimated worker memory      | 100 MB (0.10 GB)Estimated total memory       | 378 MB (0.37 GB)------------------------------------------------------------# Suggested Caddyfile configuration{  frankenphp {    worker {      file "/path/to/your/frankenphp-worker.php"      num 2    }    num_threads 4    max_threads 8  }}

PHP-FPM Calculator (fpm.sh)

Usage

# Basic usage./fpm.sh# Custom configuration./fpm.sh -r 0.5 -b 10# Static mode./fpm.sh --pm static# JSON output./fpm.sh --json

Options

FlagDescriptionDefault
-r, --reserved <GB>RAM reserved for OS1 GB
-b, --buffer <PERCENT>Safety buffer percentage10%
-p, --pool-patternProcess pattern to match"php-fpm: pool"
--pm <dynamic|static>PM modedynamic
--jsonJSON outputtable

Output Example

------------------------------------------------------------PHP-FPM Process Calculator (CLI)------------------------------------------------------------Total RAM (GB)           | 0.94Reserved RAM (GB)        | 0.5RAM Buffer (%)           | 10Worker Process (MB)      | 7.93Available RAM (GB)       | 0.40Available RAM (MB)       | 410------------------------------------------------------------pm.mode (selected)       | dynamicpm.max_children          | 51pm.start_servers         | 10pm.min_spare_servers     | 5pm.max_spare_servers     | 15------------------------------------------------------------# Suggested php-fpm pool configpm = dynamicpm.max_children = 51pm.start_servers = 10pm.min_spare_servers = 5pm.max_spare_servers = 15

Performance Testing

Usetest.sh to load test your configuration:

# Test with 51 concurrent workers for 60 seconds./test.sh -w 51 -u http://localhost/login -d 60# Progressive load test (10% → 100%)./test.sh -u http://localhost/login --progressive -m 51

Real-World Example: 1GB Server

Setup

  • Server: 1 CPU, 1GB RAM
  • Stack: Laravel + SQLite + FrankenPHP
  • Worker size: ~50 MB under load

Configuration Process

# 1. Run the calculator./frankenphp.sh -r 0.2 -b 10 -o auto# Output recommends:# - 6 workers# - num_threads: 12# - max_threads: 24# 2. Apply to Caddyfile# 3. Load test./test-fpm.sh -w 51 -u http://localhost/login -d 60# 4. Monitor memorywatch -n 2'free -m'

Results

  • Throughput: 150-160 req/s
  • Response time: 300-350ms average
  • Memory usage: 400-500 MB stable
  • Uptime: 100% (no OOM kills)

Comparison: PHP-FPM vs FrankenPHP

MetricPHP-FPMFrankenPHPWinner
Requests/sec81156FrankenPHP (92% more)
Avg response120ms65msFrankenPHP (46% faster)
Memory usage441 MB459 MBPHP-FPM (4% less)
Setup complexityMediumMediumTie

Opcache Optimization is important

Locate your loaded ini withphp --ini and look for opcache.

; Core settingsopcache.enable=1; Enable OPcache for PHP requestsopcache.enable_cli=0; Disable OPcache for CLI (keeps CLI predictable)opcache.memory_consumption=256; Shared memory size for OPcache in MBopcache.interned_strings_buffer=32; Memory for interned strings (improves performance)opcache.max_accelerated_files=20000; Max number of PHP files OPcache can store; File change checks (disabled for production immutability); Reloading php-fpm and frankenphp will reload opcache tooopcache.validate_timestamps=0; Do not check file timestamps (best performance)opcache.revalidate_freq=0; No effect when timestamps are disabled; Performanceopcache.fast_shutdown=1; Faster shutdown for each requestopcache.enable_file_override=1; Allow OPcache to override include paths for speed; Optimizationopcache.optimization_level=2147483647; Enable all optimization passesopcache.save_comments=1; Keep PHP comments (needed for annotations/reflection); File caching behavioropcache.file_update_protection=0; No delay for detecting file changes (safe when immutable)opcache.max_wasted_percentage=10; Restart OPcache if fragmentation exceeds 10%; Preloading (optional); opcache.preload=/path/to/preload.php    ; Preload script for large frameworks (not necessary for frankenphp); opcache.preload_user=www-data           ; User for preload (match your PHP-FPM user); JIT (disabled for stability unless you need it)opcache.jit=off; Disable Just-In-Time compiler (not needed for most apps)opcache.jit_buffer_size=0; No memory reserved for JIT

Credit:

Inspiration from:https://www.damianoperri.it/public/phpCalculator/

About

Tooling and docs to optimize php using opcache, php-fpm/frankenphp

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp