Iniciar uma conversa

Como configurar o servidor web/WebMail para FastCGI, visando melhor performance.

Este procedimento é válido apenas para plataforma Windows, plataforma Linux roda apenas FastCGI já por padrão, entretanto os ajustes de threads mencionados neste FAQ podem ser úteis.

Em versões anteriores à 10.1.2, por padrão, o Web Server usava ISAPI (DLL). A partir da versão 10.1.2 (novas instalações), o FastCGI já está definido por padrão. O FastCGI consitente em mapear a parte de scripting para executáveis (php.exe).

Antes de mais nada, você deve estar usando a versão mais recente. Faça backup do arquivo icewarp\config\webserver.dat.

Através do console de administração IceWarp, acesse a opção Web (ícone de globo) e clique no botão Editar Arquivo, do lado direito.

Apenas verifique se existem tags que iniciam com <FCGI, como por exemplo <FCGI_THREADPOOL>. Provavelmente, o valor dessa tag FCGI_THREADPOOL estará como -1. Altere para 15, que é o default (ou seja, até 15 processos php.exe simultâneos) e salve o arquivo. Fica, então, da seguinte forma:

<FCGI_THREADPOOL>15</FCGI_THREADPOOL>

Verifique ainda, através do console, em Arquivo/Console API, buscando pela variável "webservice.appmaxthreads". O ideal é que esteja com valor 0, caso negative, altere para 0. A razão é que desejamos definir threads a nível de FastCGI e não globalmente.

Agora dê um duplo clique no site default do Serviço Web e navegue até a aba Mapeamento de Aplicativo (Scripting).

Desejamos alterar todos os Aplicativo (Extensions) , exceto [WCS.DLL], substituindo  “php\php.dll” por “(fastcgi);php\php.exe” (sem aspas). Na v10 isso é automático, bastando escolher a sintaxe de FastCGI (apontando para php.exe) a partir do menu pull-down, apresentando quando se clica em determinada extensão. Caso os mapeamentos já estejam definidos para php.exe, não é  necessário realizar qualquer alteração.

Veja como deve ficar, na tela abaixo:

Na versão Linux os mapeamentos devem ser da seguinte forma:

(fastcgi)var/php.socket;scripts/phpd.sh


Finalmente, dê um botão da direita no serviço Web, em Sistema/Serviços/guia Geral e escolhar Reiniciar módulo. Caso tenha problemas, renomeie o webserver.dat de volta ao anterior e entre em contato com nosso suporte ou reinstale o IceWarp, para que o arquivo seja substituído por um novo.

Vale ressaltar que o serviço Web precisa estar em modo depurado para mostrar o detalhamento de threads em uso. Ative em Sistema/Serviços, no menu pulldown Tipo de logging, ao lado do serviço Web. Garanta que o seu sistema está sempre abaixo dos 15 threads definidos (no item FastCGI aparecerá no log free=15, por exemplo, indicando que há 15 threads livres).

Ressaltando, 15 threads costumam ser o suficiente e permite a conexão simultânea de centenas de usuários. O thread indica quantos php.exe's são abertos ao mesmo tempo. Para sistemas com muitas contas utilizando o webmail, pode ser necessário aumentar tal valor, sendo que cada processo php.exe costuma gastar cerca de 30 MB de memória. Em servidores com maior utilização do WebMail, tal número deve ser aumentado.

Valores da tag OPTIONS

Verifique também se as tags do arquivo webserver.dat estão com os valores ideias. Caso negativo, considere copiar e colar o trecho abaixo para o seu arquivo, na respectiva seção de <OPTIONS> até </OPTIONS>.

<OPTIONS>
<ISAPI_RESTART/>
<ISAPI_RESTART500/>
<ISAPI_RESTART500DATA/>
<ISAPI_THREADPOOL>0</ISAPI_THREADPOOL>
<FCGI_INITSERVERS>6</FCGI_INITSERVERS>
<FCGI_TIMEOUT>150000</FCGI_TIMEOUT>
<FCGI_MAXSERVERS>0</FCGI_MAXSERVERS>
<FCGI_MAXROUNDS>10000</FCGI_MAXROUNDS>
<FCGI_RESTART500>3</FCGI_RESTART500>
<FCGI_BINDIP>127.0.0.1</FCGI_BINDIP>
<FCGI_CHECKRUNNING>1</FCGI_CHECKRUNNING>
<FCGI_THREADPOOLTIMEOUT>0</FCGI_THREADPOOLTIMEOUT>
<FCGI_ENVIRONMENT>PHP_FCGI_MAX_REQUESTS=20000</FCGI_ENVIRONMENT>
<FCGI_THREADPOOL>15</FCGI_THREADPOOL>
<FISAPI_NUMSERVERS>3</FISAPI_NUMSERVERS>
<FISAPI_INITSOCKS>10</FISAPI_INITSOCKS>
<FISAPI_MAXROUNDS>10000</FISAPI_MAXROUNDS>
<FISAPI_TIMEOUT>900000</FISAPI_TIMEOUT>
<FISAPI_THREADPOOL>0</FISAPI_THREADPOOL>
<MODULES_TIMEOUT>
<MODULE TITLE="[activesync]" TIMEOUT="1800000"/>
</MODULES_TIMEOUT>
<MODULES_THREADPOOL>
<MODULE TITLE="[wcs]" THREADPOOL="0"/>
<MODULE TITLE="[activesync]" THREADPOOL="-1"/>
</MODULES_THREADPOOL>
<HTTP10>0</HTTP10>
<NOCHUNKEDENCODING>1</NOCHUNKEDENCODING>
<COMPRESSTHRESHOLD/>
<LOGFORMAT>c-ip cs-username date time cs-method cs-uri-stem cs-version sc-status bytes cs(Referer) cs(User-Agent)</LOGFORMAT>
<DEFAULTHOST/>
<SKIPSETTINGSUPDATE>0</SKIPSETTINGSUPDATE>
</OPTIONS>

Detalhamento técnico das tags

Segue detalhamento técnico das tags após <OPTIONS>, apenas para fins informativos. Não há nada a ser feito nessa etapa.

<FCGI_INITSERVERS> - Number of instances of php.exe which are running immediately after start.

<FCGI_MAXSERVERS> - Maximal number of running instances - not implemented yet. Use Webserver thread pooling to limit number of running instances!!

<FCGI_BINDIP>    - IP address bound to php.exe and used to communication between IceWarp server and PHP. This value has to be set. Usually there is no need to put other value than 127.0.0.1 here.

<FCGI_ENVIRONMENT> - Environment variables, which are sent to php.exe to control its behaviour.

PHP_FCGI_MAX_REQUESTS - This environment variable tells php.exe to quit automatically after given number of processed requests.

<FCGI_MAXROUNDS> - Similar option as PHP_FCGI_MAX_REQUESTS, but the counting of requests and killing of instances is responsibility of IceWarp server and not php.exe itself.

<FCGI_CHECKRUNNING> - Boolean value - if set to true, each instance of php.exe is checked, whether it is running or not, before trying to send data to it. This brings slowdown and it is not needed when PHP_FCGI_MAX_REQUESTS is greater than FCGI_MAXROUNDS.

<FCGI_TIMEOUT> - time in ms saying how long IW server will wait for PHP to process a request. If php is unable to do its work it in that time you will see in the web log error like
SYSTEM [15B0] 09:07:00 FCGI: (worker 6960) Timeout 150000 ms expired while waiting for FCGI response (Processed = 13, Running=1)
SYSTEM [15B0] 09:07:00 Internal Server Error: in cooperation with cgi/fastcgi, Original request:
POST /-.._._.--.._1308890355/webmail/server/webmail.php HTTP/1.1

<FCGI_RESTART500> - determines the value of returned HTTP 500 error when IW server will restart php thread. E.g. <FCGI_RESTART500>3</FCGI_RESTART500> means that if the thread returns the 500 3rd times then IW kills it (and starts it again). 

 

Escolher arquivos ou arraste e solte arquivos
Esse artigo foi útil?
Sim
Não
  1. Flávio Zarur Lucarelli

  2. Publicado
  3. Atualizado

Comentários