Fcgid

From wiki.mikejung.biz
Revision as of 01:26, 16 December 2014 by Admin (talk | contribs) (Created page with "=mod_fcgid= ==FcgidMaxRequestLen== If the size of the request body exceeds this amount, the request will fail with 500 Server Error. By default this is set to 131072 Bytes....")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

mod_fcgid

FcgidMaxRequestLen

If the size of the request body exceeds this amount, the request will fail with 500 Server Error. By default this is set to 131072 Bytes. For cPanel the default is 1073741824, which is about 1GB.

<IfModule mod_fcgid.c>
    FcgidMaxRequestLen 1073741824
</IfModule>

FcgidMaxProcessesPerClass

This directive sets the maximum number of processes that can be started for each process class, turns out that class means PER USER. If you have multiple users, or have a cPanel server please DO NOT USE THIS. Use FcgidMaxProcesses which sets the global limit. If you set the per class value, it gets multiplied by the amount of users. By default this value is set to 100. If you do not have lots of RAM, lower this to around 20 or so, assuming your app uses about 30MB per process.

<IfModule mod_fcgid.c>
    FcgidMaxProcessesPerClass 100
</IfModule>

FcgidMaxProcesses

This sets the global / server limit for how many PHP processes can run. Unlike the FcgidMaxProcessesPerClass directive, which is a per user limit, this directive is for all users. This is basically MaxClients but for PHP.

<IfModule mod_fcgid.c>
    FcgidMaxProcesses 100
</IfModule>

FcgidMaxRequestsPerProcess

FastCGI application processes will be terminated after handling the specified number of requests. By default this is set to 0 which means there is no limit / check.

<IfModule mod_fcgid.c>
    FcgidMaxRequestsPerProcess 0
</IfModule>

FcgidConnectTimeout

This is the maximum period of time the module will wait while trying to connect to a FastCGI application on Windows. (This directive is not respected on Unix, where AF_UNIX defaults will apply.)

FcgidIOTimeout

This is the maximum period of time the module will wait while trying to read from or write to a FastCGI application. If you have a slow application you may want to raise this, however 40 seconds is plenty of time. IF you site / app takes 40 seconds to load then odds are no one will ever want to visit your site again.

FcgidIdleTimeout

Application processes which have not handled a request for this period of time will be terminated, if the number of processses for the class exceeds FcgidMinProcessesPerClass. A value of 0 disables the check. The default value is 300 seconds.

<IfModule mod_fcgid.c>
    FcgidIdleTimeout 300
</IfModule>

FcgidMinProcessesPerClass

This directive sets the minimum number of processes that will be retained in a process class after finishing requests. By default the value is 3.

<IfModule mod_fcgid.c>
    FcgidMinProcessesPerClass 3
</IfModule>

FcgidProcessLifeTime

Idle application processes which have existed for greater than this time will be terminated, if the number of processses for the class exceeds FcgidMinProcessesPerClass. A value of 0 disables the check. By Default this is set to 3600, if you want to save RAM you can set this to something like 30 to kill off unused processes

<IfModule mod_fcgid.c>
    FcgidProcessLifeTime 60
</IfModule>

FcgidIdleScanInterval

This is the interval at which the module will search for processes which have exceeded FcgidIdleTimeout or FcgidProcessLifeTime. The default is 120 seconds, you can lower this if you want shorter living processes.

<IfModule mod_fcgid.c>
    FcgidIdleScanInterval 60
</IfModule>

Zend opcache

opcache.max_accelerated_files

http://php.net/manual/en/opcache.configuration.php#ini.opcache.max-accelerated-files

opcache.max_accelerated_files - Controls how many PHP files can be held in memory at the same time. Should be set to a Prime number for better performance. { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 }

To find out how many files you have, you can use a command like this.

find . -type f -print | grep php | wc -l

I set this to 7963 for my 1GB server and this value seems to work well.

opcache.max_accelerated_files = 7963


opcache.memory_consumption

opcache.memory_consumption - The default is 64MB, if you have a ton of sites or large amounts of PHP code in general you might want to raise this. For a 1GB server I set this to 64MB.

opcache.memory_consumption = 64

opcache.interned_strings_buffer

opcache.interned_strings_buffer - PHP uses string interning to improve performance. If you have the string "mahstring" 100 times in your code, PHP will store 1 variable for the string and will use a pointer to it for the other 99 times it gets used. This value is in MB. Raising this value too high causes each PHP process to use more RAM, or at least appear to. When this was set to 16MB each PHP process was around 48MB. When set to 4MB each PHP process used around 32MB RAM each. This is shared RAM so the usage may not matter much, but just keep that in mind when you tune this and use high values.

opcache.interned_strings_buffer = 4

opcache.revalidate_freq

opcache.revalidate_freq How often in seconds should the code cache expire and check if your code has changed. 0 means it checks your PHP code every single request which can hurt performance. If you don't update PHP code all that often then setting this to 120 seconds could help with performance and still get refreshed every 2 minutes.

opcache.revalidate_freq=120

Apache Event with FCGI Optimization Guide

  • Use Apache 2.4 Event
  • Use FCGI or PHP-FPM to handle PHP
  • Use PHP 5.5 or newer
  • Enable Zend OPcache for PHP

1GB Server

Use PHP 5.5+, enable Zend OPcache

opcache.memory_consumption=64
opcache.interned_strings_buffer=4
opcache.max_accelerated_files=7963
opcache.revalidate_freq=120
opcache.fast_shutdown=1
opcache.enable_cli=1
opcache.enable=1

Use Apache Event, don't worry about Apache settings, but make sure you use FCGI as PHP handler and set these limits to prevent the server from running out of memory.

<IfModule mod_fcgid.c>
    FcgidMaxRequestLen 1073741824
    FcgidMaxProcesses 20
    FcgidIdleTimeout 60
    FcgidIdleScanInterval 30
    FcgidProcessLifeTime 120
</IfModule>