Documentation for Ruby LiteSpeed Server API https://www.litespeedtech.com/images/logos/litespeed/litespeed-logo.png 2019-10-30 20:42:40 Installing, configuring, and using Ruby LiteSpeed Server API

Ruby LSAPI Documentation

Installing, configuring, and using Ruby LSAPI

Ruby LSAPI Installation/Upgrade

The easiest way to install Ruby LSAPI is as a gem:

gem install ruby-lsapi

To upgrade, just reinstall Ruby LSAPI as a gem.

Ruby LSAPI Administration

Setting up Ruby applications is as easy as plugging the application's information into a Ruby context. Below is a brief description of the steps for setting up a Ruby application: (More detailed guides can be found in our wiki.)

  1. Add a virtual host and a Rack/Rails context: The easiest way to do this is to add a member virtual host to the EasyRailsWithSuEXEC virtual host template. (Go to the Virtual Host Templates tab, in the WebAdmin console under Configuration.) Virtual hosts using this template already have a Rack/Rails context with the Ruby application's URI set to "/".
  2. Graceful restart to apply changes: (WebAdmin console > Actions > Graceful Restart) Scripts with the suffix you defined in the script handler will now use the external application you created.

Ruby LSAPI Configuration

External Application Settings

Much of your Ruby settings are controlled by your Rack/Rails settings (WebAdmin console > Configuration > Rack/Rails) and in each individual Rails/Rack context. These settings are explained in the LiteSpeed Web Server documentation.

Environment Variables

Ruby LSAPI applications can be further configured using the environment variables listed below:

LSAPI_CHILDREN
(default: 0)

LSAPI allows a variety of setups. Two of these setups, Worker and ProcessGroup can be set using this environment variable. (Note: In previous versions of this documentation, Worker was referred to as "server managed mode" and ProcessGroup referred to as "self managed mode".)

Setting LSAPI_CHILDREN to <=1 puts LSWS in Worker mode. In Worker mode, LiteSpeed Web Server dynamically spawns new Ruby processes to meet demand and kills finished processes. In this mode, an external application's Instances setting (WebAdmin console > Configuration > External App > your external application) should match the Max Connections setting (WebAdmin console > Configuration > External App > your external application).

Setting LSAPI_CHILDREN to >1 puts LSWS in ProcessGroup mode. In ProcessGroup mode, the web server will start one constantly-running Ruby parent process, and this process will fork child Ruby processes (as opposed to spawning new processes) to meet demand. ProcessGroup is generally preferred because all Ruby processes can then share one memory block for opcode caching. In ProcessGroup mode, Instances should be set to 1, while LSAPI_CHILDREN should be set to match the value of Max Connections. Usually, there is no need to set LSAPI_CHILDREN over 100.

LSAPI_AVOID_FORK
(default: 0)

LSAPI_AVOID_FORK specifies whether the internal process manager in ProcessGroup mode should try to avoid forking new child processes. A value can be used to set free memory limit in addition to 0 and 1, the minimum is 10M, default is 1G.

When set to 0, the internal process manager will not try to avoid forking new processes. To save system resources, it will stop processes when they finish and only start child processes when they are needed. This is often preferred in shared hosting.

When set to 1, the internal process manager will try to avoid frequently stopping and starting child processes. This might be preferred in a dedicated hosting environment because it may be faster to recycle existing processes, even if it means running processes when they are unused sometimes.

LSAPI_EXTRA_CHILDREN
(default: 1/3 of LSAPI_CHILDREN or 0)

In ProcessGroup mode, LSAPI_EXTRA_CHILDREN controls the maximum number of extra child processes that can be started when existing child processes are malfunctioning. The total number of child processes will be reduced to the level set in LSAPI_CHILDREN as soon as service is back to normal. When LSAPI_AVOID_FORK is set to 0, the default value of LSAPI_EXTRA_CHILDREN is 1/3 of LSAPI_CHIDLREN. When LSAPI_AVOID_FORK is set to 1, the default value is 0.

LSAPI_MAX_REQS
(default: 10000)

In ProcessGroup mode, this controls how many requests each child process will handle before it exits automatically. This parameter can help reduce memory usage by leaky Ruby functions.

LSAPI_MAX_IDLE
(default: 300 seconds)

In ProcessGroup mode, LSAPI_MAX_IDLE controls how long an idle child process will wait for a new request before it exits. This option helps release system resources taken by idle processes.

LSAPI_MAX_IDLE_CHILDREN
(default: 1/3 of LSAPI_CHILDREN or LSAPI_CHILDREN)

In ProcessGroup mode, LSAPI_MAX_IDLE_CHILDREN controls how many idle child processes are allowed. Extra idle child processes will be killed by the parent process immediately. When LSAPI_AVOID_FORK is set to 0, the default value of LSAPI_MAX_IDLE_CHILDREN is 1/3 of LSAPI_CHIDLREN. When LSAPI_AVOID_FORK is set to 1, the default value of LSAPI_MAX_IDLE_CHILDREN is the same as the value of LSAPI_CHILDREN.

LSAPI_MAX_PROCESS_TIME
(default: 3600 seconds)

In ProcessGroup mode, LSAPI_MAX_PROCESS_TIME controls the maximum processing time allowed when processing a request. If a child process can not finish processing a request in the given time period, it will be killed by the parent process. This option can help get rid of dead or runaway child processes.

LSAPI_PGRP_MAX_IDLE
(default: FOREVER )

In ProcessGroup mode, LSAPI_PGRP_MAX_IDLE controls how long the parent process will wait before exiting when there are no child processes. This option can help release system resources taken up by an idle parent process. This environment variable has the same function as the Max Idle Time setting (WebAdmin console > Configuration > External App).

LSAPI_PPID_NO_CHECK

By default, an LSAPI external application will exit automatically if the parent process dies. This is to reduce orphan processes when the web server is restarted. However, it may be desirable to disable this feature in situations such as when an LSAPI process was started manually from the command line. Adding the LSAPI_PPID_NO_CHECK environment variable (set it to 1) will disable the checking for the existence of a parent process. To turn off this setting, remove the environment variable completely.

LSAPI_ALLOW_CORE_DUMP

By default, an LSAPI application will not leave a core dump file when it crashes. If you want to have LSAPI dump a core file, you should add this environment variable and set to 1. If set, core files will be created under the current working directory, generally the directory of the Ruby script that crashed. To turn off this setting, remove the environment variable completely.