How to Enable LSPHP CRIU on CloudLinux and cPanel EA4

Checkpoint/Restore In Userspace, or CRIU, is an open source project which dumps all of the information of a running process to disk and restores it at the point of the dump. The LiteSpeed Enterprise Edition Web Server now supports CRIU for the CloudLinux implementation of the PHP processor. This will improve the performance of LiteSpeed for transactions which are commonly used, and reduce the memory overhead on the server.

Requirements

  1. CloudLinux System
  2. ea-apache24-mod_lsapi 1.1 on cpanel EA4 (or mod_lsapi on cPanel EA3) or above
  3. LiteSpeed Web Server 5.3 or above.

Installation

1. Verify CRIU is enabled on your system

Criu is installed with dependency to ea-apache24-mod_lsapi for cpanel EA4( or mod_lsapi for cpanel EA3) 1.1 and above package.

If you have not installed it, you should:

yum install liblsapi liblsapi-devel
=============================================================================================================================================================================
 Package                                Arch                          Version                                        Repository                                         Size
=============================================================================================================================================================================
Installing:                                                                                                                                                               
 liblsapi                               x86_64                        1.1-28.el7.cloudlinux                          cloudlinux-x86_64-server-7                        180 k
 liblsapi-devel                         x86_64                        1.1-28.el7.cloudlinux                          cloudlinux-x86_64-server-7                         37 k
Installing for dependencies:                                                                                                                                              
 crit-lve                               x86_64                        3.7-3.el7                                      cloudlinux-x86_64-server-7                        9.6 k
 criu-lve                               x86_64                        3.7-3.el7                                      cloudlinux-x86_64-server-7                        439 k
 criu-lve-devel                         x86_64                        3.7-3.el7                                      cloudlinux-x86_64-server-7                         11 k
 libnet                                 x86_64                        1.1.6-7.el7                                    cloudlinux-x86_64-server-7                         58 k
 protobuf-c                             x86_64                        1.0.2-3.el7                                    cloudlinux-x86_64-server-7                         27 k
 protobuf-python                        x86_64                        2.5.0-8.el7                                    cloudlinux-x86_64-server-7                        129 k
 python-criu-lve                        x86_64                        3.7-3.el7                                      cloudlinux-x86_64-server-7                        136 k
 python-ipaddr                          noarch                        2.1.11-1.el7                                   cloudlinux-x86_64-server-7                         34 k
                                                                                                                                                                          
Transaction Summary
=============================================================================================================================================================================
Install  2 Packages (+8 Dependent packages)
yum install ea-apache24-mod_lsapi

Check CRIU whether the service is running or not.

ps -ef | grep criu
root      967641       1  0 19:24 ?        00:00:00 /usr/sbin/criu service -v4 -o /var/log/criu-service.log --address /var/run/criu/criu_service.socket
root      967680  965818  0 19:24 pts/1    00:00:00 grep --color=auto criu

If not, enable by following method:

systemctl enable criu 
systemctl start criu
systemctl status criu

Output should be Active: active (running).

[root@globalsupport ~]# systemctl status criu
● criu.service - Checkpoint Restore in Userspace daemon
 Loaded: loaded (/usr/lib/systemd/system/criu.service; disabled; vendor preset: disabled)
 Active: active (running) since Mon 2018-08-20 19:24:25 UTC; 4min 23s ago
Process: 967640 ExecStartPre=/bin/mkdir -p /var/run/criu (code=exited, status=0/SUCCESS)
Main PID: 967641 (criu)
 CGroup: /system.slice/criu.service
         └─967641 /usr/sbin/criu service -v4 -o /var/log/criu-service.log --address /var/run/criu/criu_service.socket
Aug 20 19:24:25 globalsupport.litespeedtech.com systemd[1]: Starting Checkpoint Restore in Userspace daemon...
Aug 20 19:24:25 globalsupport.litespeedtech.com systemd[1]: Started Checkpoint Restore in Userspace daemon.
Aug 20 19:24:25 globalsupport.litespeedtech.com criu[967641]: Warn  (criu/kerndat.c:660): Can't load /run/criu.kdat

2. Check CRIU parameters

In CloudLinux, LSPHP have been compiled with CRIU already. Please check here
Use phpinfo() with parameter -DWITH_CRIU to check the LSPHP build.

3. Configure the PHP environment

Add the following necessary parameter to the PHPx.x External App > Environment

LSAPI_CRIU=1

Example for PHP56 + Enable CRUI + Set INITIAL

Important Syntax

VariableValuesDefaultDescription
LSAPI_CRIU1/On/OffOffIf set to On, CRIU will be performed. 1=On
LSAPI_INITIAL_STARTA number from 1 upwards.15The number of consecutive calls which must be made within a single PHP instance before a dump of the instance will be made. If there’s no PHP instance running and there’s a dump on disk it will be restored on the first use.
LSAPI_CRIU_IMGS_DIR_PATHAny valid, existing directory/var/run/lsws/cl_criu/CRIU images will start from this directory; a subdirectory named “images” will be created below and then a directory for each user's type of request. There needs to be lots of free space in this file system.
LSAPI_CRIU_DEBUGOn/OffOffIf set to On, messages concerning CRIU processing will be written to the stderr.log file (usually in /usr/local/apache2/logs/stderr.log)

How to Verify

Step 1

  1. Prepare any PHP site, e.g. WordPress

Step 2

  1. Generate the dump by hitting the WordPress site
  2. Hit more than INITIAL_START number, e.g. 20 times
  3. If an image dump is generated, you should see an image folder under /var/run/lsws/cl_criu/

Step 3

  1. Check the PHP process number by
    ps -ef | grep php
    >>> user      868577  ...   10:54   0:00 lsphpL
  2. Kill the lsphp process via
    kill -9  868577

Step 4

  1. Restore the PHP by refreshing the WordPress page to regenerate it
  2. Verify the process number is the same as before:
    ps -ef | grep php
    >>> user      868577  ...   10:55   0:00 lsphp

    The process is back!!

  3. You can also check standard error log for something like
    LSCRIU: Successful CloudLinux dump of PID: 868577
    LSCRIU: Successful CloudLinux restore of PID: 868577, parent: 1.

Logs

  1. Error log default located at Apache standard error log
  2. dump.log is in the images directory
  3. restore.log is in the images directory

NOTE: restore.log is generated even when there is no dump, so it's expected to see some related fail logs

 
litespeed_wiki/cloudlinux/lsphp_criu_enable.txt · Last modified: 2018/08/20 19:33 by Jackson Zhang