plakhin / fpm-optimize
Suggests optimal php-fpm config values based on system config and load
Fund package maintenance!
plakhin
Requires
- php: ^8.3.0
- illuminate/process: ^11.0|^12.0
- spatie/laravel-package-tools: ^1.19
Requires (Dev)
- larastan/larastan: ^3.1
- laravel/pint: ^1.21
- orchestra/testbench: ^9.0|^10.0
- pestphp/pest: ^3.7
- pestphp/pest-plugin-laravel: ^3.1
- pestphp/pest-plugin-type-coverage: ^3.3
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- rector/rector: ^2.0
- symfony/var-dumper: ^7.2
README
Optimal PHP-FPM config values based on system configuration and load
Warning
Despite the package also runs on Windows and macOS, it wasn't tested well enough on those operating systems, so pay close attention to the system config and load values it outputs.
This package determines the number of system CPU cores, available RAM, and average RAM usage per PHP-FPM pool worker process. It then calculates the opinionated optimal values for PHP-FPM pool configuration, such as:
pm.max_children
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
Don't forget to keep an eye on your php-fpm.log
to avoid failures!
Installation & Usage
Important
Ensure that your server is operating normally and serving incoming requests before executing the package command. This command takes into account the available RAM and the average RAM usage per PHP-FPM pool worker process to calculate values.
Globally
The most simple way, if you have Composer globally installed,
is to create temporary project and run the command by the single line:
composer create-project --no-dev --remove-vcs plakhin/fpm-optimize /tmp/plakhin-fpm-optimize && /tmp/plakhin-fpm-optimize/bin/fpm-suggest
Then you may safely delete the created temporary project if you don't need it anymore:
cd /tmp && rm -rf plakhin-fpm-optimize && cd -
Locally
Also, you can install the package with composer just locally as a dependency to your project:
composer require plakhin/fpm-optimize
And run it with
./vendor/bin/fpm-suggest
Laravel
Once installed locally as a dependency into Laravel 11+ app,
this package adds php-fpm config values suggestions into optimize
Artisan Command output.
If you don't want this behavior,
simply set FPM_OPTIMIZE_INJECT_INTO_ARTISAN_OPTIMISE_COMMAND=false
in your .env
file.
Additionally, you can run php artisan optimize:php-fpm
command to see the suggested php-fpm config values.
Contributing
Contributions are welcome, and are accepted via pull requests. Please review these guidelines before submitting any pull requests.
Process
- Fork the project
- Create a new branch
- Code, test, commit and push
- Open a pull request detailing your changes.
Guidelines
- Please ensure the coding style running
composer lint
. - Please keep the codebase modernized using automated refactors with Rector
composer refactor
. - Send a coherent commit history, making sure each individual commit in your pull request is meaningful.
- You may need to rebase to avoid merge conflicts.
- Please remember to follow SemVer.
Linting
composer lint
Refactoring with Rector
composer refactor
Testing
Run all tests:
composer test
Check code style:
composer test:lint
Check possible code improvements:
composer test:refactor
Check types:
composer test:types
Run Unit tests:
composer test:unit
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
License
The MIT License (MIT). Please see License File for more information.