This is an old revision of the document!


PHP Detached Mode in LiteSpeed Web Server

PHP Detached Mode is a big feature available in LSWS 5.3 and later.

In previous versions (LSWS 5.2.x and below), all PHP processes were attached to LiteSpeed Web Server processes. As such, when LiteSpeed Web Server restarted, so would the PHP processes. In PHP Detached Mode, the PHP processes will continue running independently, even when LiteSpeed Web Server restarts.

When you run in PHP ProcessGroup Mode, PHP process groups are still started by the litespeed process. When the first request for a specific PHP process group comes in, if PHP is not running it, it will be started by LiteSpeed. pstree will show that PHP process is child of the litespeed process. That's normal. What's new is that, as of 5.3, once the litespeed process exits, the PHP process won't quit. It will become independent.

PHP Detached Mode provides an advantage, especially when hundreds of accounts are hosted on the same shared hosting server, with new accounts being rapidly added to it. In cases like this, there is no need to restart all PHP processes during the web server restart. Also, when a user is heavily relying on opcode to reduce the server load, PHP Detached Mode avoids an opcode cache reset during the server restart.

If you are using a control panel, LSWS 5.3 will enable PHP detached mode automatically.

If you are using LSWS 5.3 (native), and explicitly configured an external application for each virtual host, you will need to set Run on Startup to PHP Detached Mode.

In the past, if there were any php.ini changes, you would probably want to restart LSWS to apply the changes(since LSWS will restart PHP processes).

As of LSWS 5.3, PHP runs in detached mode and won't be restarted during LSWS restart. If you want to make php.ini changes effective immediately, there are a few ways to restart PHP processes.

For a User

To restart detached PHP processes for the account (vhost) level, you can touch a .lsphp_restart.txt file under the user's home directory:

touch <user_home_dir>/.lsphp_restart.txt

The user can also restart detached PHP processes from the 'Advanced' page of the LiteSpeed Web Cache Manager cPanel plugin, accessible from within their cPanel dashboard.

For the Server

To restart detached PHP processes for the server level, you can touch a .lsphp_restart.txt file under the <lsws_server_root>/admin/tmp/ directory. Usually, that is /usr/local/lsws/admin/tmp/.

touch /usr/local/lsws/admin/tmp/.lsphp_restart.txt

This can also be accomplished from the 'Actions' page of the LiteSpeed WebAdmin Console or by using the 'Restart Detached PHP Processes' button in the LiteSpeed cPanel/WHM plugin.

All running detached PHP processes will be restarted, but not immediately. Instead, they will restart as soon as the server needs to use that PHP handler.

Stop All Immediately

To stop all lsphp processes immediately, you can manually kill them from the command line:

killall lsphp

PHP Detached Mode doesn't mean that PHP will run forever. It will still follow the Max Idle Time setting. If you want to make PHP live longer, just increase Max Idle Time.

In previous versions of LSWS (5.2.x and earlier), external apps and PHP handlers are set up via the External App and Script Hander sections, respectively.

On LSWS v5.3 and above, these configurations are no longer required. External apps and script handlers will be autoconfigured by the web server. If you upgrade to v5.3 from an earlier version, the external apps settings will be carried over. (However, you could delete all PHP external apps and PHP handlers and LSWS would still work fine.)

If you install a new fresh LSWS 5.3 installation, you probably won't see any PHP external apps or PHP handlers defined there. Don't worry. This is normal. If you still want to define external apps manually, you can do so. LSWS will honor these settings, and they will override the built-in external apps definition.

Currently, LSWS auto-detects apps and handlers up to PHP 7.3. Two handlers: application/x-httpd-ea-php71 and application/x-httpd-alt-php71 now point to separate handlers, where prior to 5.3, both pointed to the lsphp71 handler configuration.

So, how do you configure PHP settings if there are no external apps defined there anymore? See the new PHP tab in the Web Admin console to adjust the configuration.

Configurations set under the PHP tab or in the <phpConfig> section, serve as the default for auto-detected PHP handlers, so the memory limit set there will apply to all detected PHP handlers. An explicitly configured PHP handler will still use its own configuration.

On a WHM/cPanel and CloudLinux environment, ea-phpxx is the default handler pointing to the Easy Apache PHP binary, and alt-phpxx is the default handler pointing to the CloudLinux PHP selector binary. If you have any need to override the default handler binary, for example, to direct ea-php72 to /opt/alt/php72/usr/bin/lsphp, you can create or modify an internal app.

Create or modify existing lsphp to ea-php72:

Change the PHP binary path:

LSWS 5.3 speically adds alt-phpxx(CloudLinux PHP selector) handlers' suppport for cPanel and CloudLinux system hence alt-phpxx are different than ea-phpxx. On previous version of LSWS 5.2.x and below, there is no separate handler between alt-phpxx and ea-phpxx and both of them use ea-phpxx handlers.

The above feature will support latest cPanel multi-PHP manager more friendly since either alt-phpxx or ea-phpxx can be selected for a domain, instead of just ea-phpxx only. Then cPanel will add the following to .htaccess depending on which php was selected. LSWS 5.3 will use alt-phpxx or ea-phpxx according to user's choice. On LSWS 5.2.x and below version, LSWS will only set ea-phpxx no matter alt-phpxx or ea-phpxx selected.

AddType application/x-httpd-alt-php70 .php .php7 .phtml

or

AddType application/x-httpd-ea-php70 .php .php7 .phtml

On LSWS 5.2.x, if you set all lsphpxx binary to use alt-phpxx for all handlers and set some per directory php as the following by using ea-phpxx in .htaccess.

AddType application/x-httpd-ea-php54 .php .php7 .phtml

or

<FilesMatch ".(php4|php5|php3|php2|php|phtml)$">
SetHandler application/x-httpd-ea-php54
</FilesMatch>

It works with LSWS 5.2.x but doesn't work with LSWS 5.3. Why?

LSWS 5.3 treats ea-phpXX handler and alt-phpXX handler separately. If the server only have ea-php70 installed and other ea-phpXX handler is not available, then

SetHandler application/x-httpd-ea-php54

or

SetHandler application/x-httpd-ea-php55

will fail.

5.2.x treat ea-phpXX and alt-phpXX handler the same and handled by lsphpXX handler which pointing to alt-php binary.

How to fix it?

Method1: You should use right Handler for LSWS 5.3 now

In .htaccess, you should change:

SetHandler application/x-httpd-ea-php54

to

SetHandler application/x-httpd-alt-php54

and you should use the right one moving forward. But it seems a little time consuming to change all handler settings in all .htaccess for 5.2.x to 5.3 migration. There is another way as the following:

Method2: Make LSWS 5.3 behaves as 5.2.x

Instead of scanning .htaccess to fix wrong handler configuration, it is possible to make 5.3 behave the same as 5.2.x. Please update the name of lsphpXX external app from lsphpXX to ea-phpXX, the executable path is still pointing to alt-php binary. this way, ea-phpXX, alt-phpXX, and lsphpXX are all handled by alt-php handlers.

  • Admin
  • Last modified: 2018/09/20 16:20
  • by Jackson Zhang