Optimitzacions dels servidors apache, MySQL i PHP

PHP. Carregar extensió Mysql, Gd i Ldap

Per defecte, el fitxer /etc/php5/apache2/php.ini te comentat les extencions Mysql i Gd. Simplement descomentarem la línia i reiniciem l'Apache.

extension=mysql.so
extension=gd.so

Pel que fa Ldap, simplement afegim la línia a php.ini:

extension=ldap.so

Optimització servidor PHP

PHP per defecte té limitada la memòria màxima que un script PHP pot consumir en 8M. Molts pàgines web dinàmiques programades en PHP (per exemple joomla!) necessiten un mínim de 16M per poder funcionar.

Ho podem canviar editant el fitxer /etc/php4/apache2/php.ini (en Ubuntu) i retocant les següents línies:

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30; Maximum execution time of each script, in seconds
max_input_time = 60;     Maximum amount of time each script may spend parsing request data
memory_limit = 16M;      Maximum amount of memory a script may consume (8MB)

Després cal reiniciar el servidor apache tal com s'explica al final del següent punt.

Optimització servidor web apache

Consulta apache per instal·lació/configuració d'apache.

Primer cal saber quin tipus d'entorn d'execució d'apache utilitzem:

  • prefork.c és habitual en servirdors amb un o dos processadors.
  • worker.c és habitual en servidor de més de dos processadors.

Ho podem saber llistant els mòduls que porta compilats a dins el nostre apache amb la comanda:

apache2 -l

En un entorn prefork.c la variable MaxClients s'ha de calcular amb la fòrmula:

MaxClients = Total RAM dedicada al servidor web / Mida màxima d'un procès fill

Podem considerar que el sistema operatiu Linux i la B.D. MySQL consumeixen uns 100Mb. Llavors:

Total RAM dedicada al servidor web = Total RAM servidor - 100Mb

i

Mida màxima d'un procès fill = memory_limit de PHP + 2Mb

La fòrmula final a usar seria aquesta:

MaxClients = (Total RAM servidor - 100Mb) / (memory_limit de PHP + 2Mb)

La variable KeepAliveTimeout ha de tenir un valor entre 2 i 5 segons per a que una mateixa connexió atengui totes les peticions d'una mateixa pàgina (o sigui que apache no faci timeout a la connexió abans que el navegador comenci a demanar elements de la pàgina web com imatges, flash, …). I la variable KeepAlive a On.

També cal jugar amb les variables MinSpareServers i MaxSpareServers perquè el nombre de processos que s'executen es mantingui ni massa baix (noves peticions costarien de respondre) ni massa alt (ocupació exagerada de memòria).

Les variables anteriors les podem canviar editant el fitxer /etc/apache2/apache2.conf i retocant les següents línies (aquest exemple és el d'un servidor amb 512Mb de RAM):

KeepAlive On
MaxKeepAliveRequests 500
KeepAliveTimeout 4

# prefork MPM
# StartServers ......... number of server processes to start
# MinSpareServers ...... minimum number of server processes which are kept spare
# MaxSpareServers ...... maximum number of server processes which are kept spare
# MaxClients ........... maximum number of server processes allowed to start
# MaxRequestsPerChild .. maximum number of requests a server process serves
<IfModule prefork.c>
StartServers         5
MinSpareServers     15
MaxSpareServers     20
MaxClients          24
MaxRequestsPerChild  0
</IfModule>

I després reiniciem el servidor apache:

/etc/init.d/apache2 restart

Optimització servidor B.D. MySQL

Consulta mysql per instal·lació/configuració de MySQL.

Per defecte el servidor MySQL té limitat el nombre màxim de connexions (max_connections) a 100 i el temps que resten dormint els processos (wait_timeout) que crea MySQL està exageradament a 8 hores (28800 segons).

Ho podem canviar editant el fitxer /etc/mysql/my.cnf i afegint les següents línies:

set-variable = max_connections=110
set-variable = wait_timeout=3600

I després reiniciem el servidor mysql:

/etc/init.d/mysql restart

En un web he vist que comenten de retocar també aquests paràmetres per millorar el rendiment, encara que jo no ho he provat i cal estudiar-ho en detall amb l'ajut del manual de MySQL.

set-variable = max_connections=150
set-variable = max_user_connections=10
set-variable = interactive_timeout=60
set-variable = wait_timeout=60
set-variable = connect_timeout=10

Des de phpmyadmin es poden veure còmodament el valor de les variables i l'estat actual de MySQL i la llista de processos que té engegats.

 
servers/optimitzacio_apache_mysql.txt · Darrera modificació: 2008/04/04 17:52 (edició externa)
 
Copyright: Zikzakmedia Llicència Creative Commons By-NC-SA
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki