All Projects → php-pm → Php Pm

php-pm / Php Pm

Licence: mit
PPM is a process manager, supercharger and load balancer for modern PHP applications.

Programming Languages

PHP
23972 projects - #3 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to Php Pm

Sulu
Core framework that implements the functionality of the Sulu content management system
Stars: ✭ 645 (-89.86%)
Mutual labels:  symfony
Symfony Docker
A Docker-based installer and runtime for Symfony. Install: download and `docker-compose up`.
Stars: ✭ 732 (-88.49%)
Mutual labels:  symfony
Thelia
Thelia is an open source tool for creating e-business websites and managing online content. Repo containing the new major version (v2)
Stars: ✭ 752 (-88.17%)
Mutual labels:  symfony
Wallabag
wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.
Stars: ✭ 6,392 (+0.53%)
Mutual labels:  symfony
String
Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way.
Stars: ✭ 709 (-88.85%)
Mutual labels:  symfony
Alicebundle
A Symfony bundle to manage fixtures with Alice and Faker.
Stars: ✭ 742 (-88.33%)
Mutual labels:  symfony
Symfony Rest Edition
Fork from symfony-standard edition with additional rest features.
Stars: ✭ 643 (-89.89%)
Mutual labels:  symfony
Cocorico
👐 Cocorico is an open source marketplace solution for services and rentals. More information right here: https://www.cocorico.io/en/ 🚀 Cocorico is also available in an off-the-shelf SaaS package, check out https://www.hatch.li to launch your platform today. 😍 We are hiring (telecommute welcome 🏡): https://www.welcometothejungle.com/en/companies/cocorico/jobs/candidatures-spontanees#apply
Stars: ✭ 765 (-87.97%)
Mutual labels:  symfony
Recipes
Symfony Recipes Repository
Stars: ✭ 724 (-88.61%)
Mutual labels:  symfony
Deprecation Contracts
A generic function and convention to trigger deprecation notices
Stars: ✭ 744 (-88.3%)
Mutual labels:  symfony
Doctrine Test Bundle
Symfony bundle to isolate your app's doctrine database tests and improve the test performance
Stars: ✭ 689 (-89.16%)
Mutual labels:  symfony
Symfony
The Symfony PHP framework
Stars: ✭ 26,220 (+312.39%)
Mutual labels:  symfony
Symfony Cmf
Meta package tying together all the key packages of the Symfony CMF project.
Stars: ✭ 742 (-88.33%)
Mutual labels:  symfony
Craueformflowbundle
Multi-step forms for your Symfony project.
Stars: ✭ 654 (-89.71%)
Mutual labels:  symfony
Apache Pack
A Symfony Pack for Symfony Apache
Stars: ✭ 753 (-88.16%)
Mutual labels:  symfony
Knpgaufrettebundle
Easily use Gaufrette in your Symfony projects.
Stars: ✭ 646 (-89.84%)
Mutual labels:  symfony
Translation
The Translation component provides tools to internationalize your application.
Stars: ✭ 6,196 (-2.55%)
Mutual labels:  symfony
Pim Community Dev
[Community Development Repository] The open source Product Information Management (PIM)
Stars: ✭ 774 (-87.83%)
Mutual labels:  symfony
Symfony 5 Es Cqrs Boilerplate
Symfony 5 DDD ES CQRS backend boilerplate
Stars: ✭ 759 (-88.06%)
Mutual labels:  symfony
En Marche.fr
Le site principal du mouvement En Marche !
Stars: ✭ 743 (-88.31%)
Mutual labels:  symfony

PPM - PHP Process Manager

PHP-PM is a process manager, supercharger and load balancer for PHP applications.

Build Status Gitter

It's based on ReactPHP and works best with applications that use request-response frameworks like Symfony's HTTPKernel. The approach of this is to kill the expensive bootstrap of PHP (declaring symbols, loading/parsing files) and the bootstrap of feature-rich frameworks. See Performance section for a quick hint. PHP-PM basically spawns several PHP instances as worker bootstraping your application (eg. the whole Symfony Kernel) and hold it in the memory to be prepared for every incoming request: This is why PHP-PM makes your application so fast.

More information can be found in the article: Bring High Performance Into Your PHP App (with ReactPHP)

Features

  • Performance boost up to 15x (compared to PHP-FPM, Symfony applications).
  • Integrated load balancer.
  • Hot-Code reload (when PHP files change).
  • Static file serving for easy development procedures.
  • Support for HttpKernel (Symfony/Laravel), Drupal (experimental), Zend (experimental).

Badge all the things

Does your app/library support PPM? Show it!

PPM Compatible

[![PPM Compatible](https://raw.githubusercontent.com/php-pm/ppm-badge/master/ppm-badge.png)](https://github.com/php-pm/php-pm)

Use

cd into/your-application

# run Symfony
docker run -v `pwd`:/var/www -p 8080:80 phppm/nginx --bootstrap=symfony --static-directory=web/

# run Laravel
docker run -v `pwd`:/var/www -p 8080:80 phppm/nginx --bootstrap=laravel --static-directory=public/

Docker is easier to setup and maintain. If your applications requires additional environment tools or libraries, you can build your own image based on ours. See github.com/php-pm/php-pm-docker for more information.

When debug is enabled, PHP-PM detects file changes and restarts its worker automatically.

Use without Docker

Follow the wiki article Use without Docker.

Performance

To get the maximum performance you should usually use --app-env=prod with disabled debug --debug=0. Also make sure xdebug is disabled. Try with different amount of workers. Usually a 10% over your cpu core count is good. Example: If you have 8 real cores (excl. hyper-threading) use --workers=9.

To get even more performance (for static file serving or for rather fast applications) try a different event loop (see https://github.com/reactphp/event-loop).

Debugging

If you get strange issues in your application and you have no idea where they are coming from try using only one worker --workers=1 and enable -v or -vv.

When debugging you should use xdebug as you're used to. If you set a break point and hold the application, then only one worker is stopped until you release the break point. All other workers are fully functional.

Note for XDebug and PHPStorm: Since php-pm uses at least two processes, there are two xdebug instances as well. PHPStorm is per default configured to only accept one connection at a time. You need to increase that. You won't get xdebug working with your application if you don't increase that count.

Xdebug and PHPStorm

In all workers the STDOUT is redirected to the connected client. So take care, var_dump, echo are not displayed on the console. STDERR is not redirected to the client, but to the console. So, for very simple debugging you could use error_log('hi') and you'll see it on the console. Per default exceptions and errors are only displayed on the console, prettified with Symfony/Debug component.

Adapter

HttpKernel for Symfony/Laravel - https://github.com/php-pm/php-pm-httpkernel

Zend - https://github.com/php-pm/php-pm-zend

CakePHP - https://github.com/CakeDC/cakephp-phppm

Command

ppm-help

ppm-start

Symfony

cd my-project
docker run -v `pwd`:/var/www -p 8080:80 phppm/nginx --static-directory=web/

Laravel

cd my-project
docker run -v `pwd`:/var/www -p 8080:80 phppm/nginx --bootstrap=laravel --static-directory=web/

Zend

cd my-project
docker run -v `pwd`:/var/www -p 8080:80 phppm/nginx --bootstrap=Zf2

Wordpress

For all Wordpress lovers out there: PPM is not going to work with Wordpress due to the lack of request-response abstraction. We highly doubt that Wordpress is ever going to be compatible because its architecture is written in a way that makes it currently impossible to serve multiple requests in one application process.

Performance (requests/s)

6x4GHz Intel i7, 16GB RAM. 10 concurrent, 1000 total request: ab -c 10 -n 1000 http://127.0.0.1:8080/

Symfony, CMS application

ppm start --bootstrap=symfony --app-env=prod --logging=0 --debug=0 --workers=20

https://github.com/jarves/jarves

PHP Version Dynamic at Jarves Static file
7.0.3, StreamSelectLoop 2387,67 3944,52
5.6.18, StreamSelectLoop 1663,56 2636,09
5.6.18, LibEventLoop 1811,76 3441,72

Laravel, example package

https://github.com/bestmomo/laravel5-example

ppm start --bootstrap=laravel --app-env=prod --debug=0 --logging=0 --workers=20

Issues

  • Memory leaks, memory leaks and memory leaks. You will also find leaks in your application. :) But no big issue since workers restart automatically.
  • Does not work with ExtEventLoop. (So don't install php70-event, but you can try LibEventLoop php56-libevent)
  • Drupal and Zend is very experimental and not fully working. Try using https://github.com/php-pm/php-pm-drupal.
  • Laravel's debugger isn't working perfectly yet since it's still needed to reset some stuff after each request.
  • Streamed responses are not streamed yet
  • No windows support due to signal handling

Please help us fix these issues by creating pull requests. :)

Setup

We provide ready-to-use docker images you can use right away. If you have own setup, see in the PHP-PM docker repository how to integrate PHP-PM in your NGiNX setup.

Trusted proxy Symfony

To get the real remote IP in your Symfony application for example, don't forget to add ppm (default 127.0.0.1) as trusted reverse proxy.

# app/config/config.yml
# ...
framework:
    trusted_proxies:  [127.0.0.1]

More information at http://symfony.com/doc/current/cookbook/request/load_balancer_reverse_proxy.html.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].