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
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.
Consulta apache per instal·lació/configuració d'apache.
Primer cal saber quin tipus d'entorn d'execució d'apache utilitzem:
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
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.