Optimizar PHP : Instalar Zend Optimizer + Suhosin + XCache

A la hora de ejecutar PHP de forma eficiente, nos toca aprender un par de cosas sobre cachés, desactivar logs, etc. de igual forma que Apache. En este artículo describo directamente como cambiar algunas cuestiones de configuración, instalar XCaché, Zend Optimizer y Suhosin para que se ejecuten con PHP. Recomiendo tomarse un tiempo con cada tema para investigarlo bien y comprenderlo.

La configuración

En un servidor en producción, convienen los siguientes cambios en la configuración de php.ini:

Nos aseguramos que no desvelamos la versión de PHP:

expose_php = Off

Aumentar el límite de memoria si sabemos que algún script puede necesitarla:

memory_limit = 64M

Nos aseguramos de no mostrar ningún tipo de error si algo falla (para evitar desvelar paths y otra información que pudiera ser sensible)

display_errors = Off

Y si queremos ganar algo de velocidad, no es mala idea desactivar el logging de errores también. Se supone que el servidor en producción no es para debugging:

Continuar leyendo «Optimizar PHP : Instalar Zend Optimizer + Suhosin + XCache»

Instalar XCACHE integrado con Lighttpd en CentOS

XCache es un opcode PHP cacher creado por Jan Kneschke creador de Lighttpd. Se ha probado en servidores en produccion con alta carga dando unos resultados francamente buenos.  Según algunos, dando mucho mejor resultado en diversas aplicaciones como Vbulletin que otros como Eaccelerator/APC/IonCube/Zend.

Instalación de Requisitos previos para compilar XCACHE

yum install php-devel

yum groupinstall ‘Development Tools’

yum groupinstall ‘Development Libraries’

Descarga y compilación de XCACHE

cd /tmp
wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
tar xvfz xcache-1.2.2.tar.gz
cd xcache-1.2.2
phpize
./configure –enable-xcache
make
make install

Configurando XCACHE

cp xcache.ini /etc/php.d
vi /etc/php.d/xcache.ini

Opciones de configuración

zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so

* Debemos indicar el lugar donde esta situado el modulo de Xcache

xcache.size = 32M

* Cualquier valor superior a 0 habilita Xcache. 0 lo deshabilita

Todas las opciones de configuración están en la pagina oficial: http://xcache.lighttpd.net/wiki/XcacheIni

Reiniciamos Lighttpd

service lighttpd restart

Si todo ha ido bien, deberíamos tener cargado la extensión de XCACHE para nuestro PHP:

PHP 5.1.6 (cli) (built: Jul 16 2008 19:52:52)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with XCache v1.2.2, Copyright (c) 2005-2007, by mOo

Instalar XCache en CentOS 5

Breves instrucciones para compilar y instalar Xcache en Centos 5. No tiene mayor dificultad.

# wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
# tar -zxf xcache-1.2.2.tar.gz
# cd xcache
# phpize
# ./configure –enable-xcache
# make
# su
# make install

Instala las extesiones compartidas de php : /usr/lib/php/modules

# cat xcache.ini >> /etc/php.ini

Editamos php.ini para instalar Xcache como extension

# joe /etc/php.ini

zend_extension = /usr/lib/php/modules/xcache.so

La configuración del xcache está explicada en comentarios en el propio php.ini, pero hay cosas relevantes como el xcache.count, relativo al número de procesadores de nuestro sistema. Averiguamos el número de procesadores y luego editamos el php.ini

# cat /proc/cpuinfo |grep -c processor
xcache.count = 4

Las demás variables se pueden configurar fácilmente leyendo la documentación. Ahora podemos crear un archivo php con la función phpinfo ( ) y moverlo a nuestro directorio root para comprobar que Xcache funciona correctamente. No olvidemos reiniciar Apache!

# /etc/init.d/httpd restart

Instalar el Admin

Para instalar el admin primero creamos un fichero php como el siguiente para obtener el password encriptado en md5

echo md5("password");

Copiamos el resultado en php.ini, en la variable xcache.admin.pass

xcache.admin.pass = "password_en_md5"

Ahora copiamos el directorio web de Xcache a nuestro document root de apache


# cp -R admin/* /var/www/midominio.com/admin/.

Reiniciamos Apache. Accedemos al admin, introduciendo user y password.

Sobre el Error Segmentation Fault

Algo que me sucedió en la instalación de Xcache en Centos 5. Al comprobar los logs de Apache comprobé que había numerosos errores de Segmentation Fault.

# php -v
Segmentation fault

# cat /var/log/httpd/error_log
[Thu Oct 02 13:43:39 2008] [notice] child pid 15978 exit signal Segmentation fault (11)
[Thu Oct 02 13:43:42 2008] [notice] child pid 15979 exit signal Segmentation fault (11)
[Thu Oct 02 13:43:50 2008] [notice] child pid 15980 exit signal Segmentation fault (11)
[Thu Oct 02 13:44:08 2008] [notice] child pid 15981 exit signal Segmentation fault (11)
[Thu Oct 02 13:44:12 2008] [notice] child pid 15982 exit signal Segmentation fault (11)
[Thu Oct 02 13:44:33 2008] [notice] child pid 15983 exit signal Segmentation fault (11)

Para evitarlo hacemos lo siguiente


# rm /dev/zero
# mknod /dev/zero char 1 5
# /etc/init.d/httpd restart

Otro problema relativo. Aunque creemos el fichero /dev/zero, por una limitación (no se si de php.ini o el propio kernel) puede que el valor de cache que asignamos a xcache.size es superior a lo que puede guardar y eso provoca el siguiente error:

xcache /dev/zero: No space left on device

Para arreglar, hemos de reducir el valor asignado a xcache.size, por ejemplo empezando por 8M y reiniciando apache. No deberíamos ver más ese error ni Segmentation Faults en el apache. Y si los hay, deberían ser por otro motivo que no fuera Xcache.