PHP, Servidores - Escrito por Juan Gabriel Covas el Lunes, 22 de Diciembre de 2008 a las 12:22 pm - 2 comentarios
Optimizando PHP: Instalando Suhosin + XCache + Zend Optimizer
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:
log_errors = Off
Instalando Zend Optimizer
Los beneficios del gratuito Zend Optimizer son básicamente que permite ejecutar archivos codificados con Zend Encoder y en algunos casos puede ganarse hasta un 40% de velocidad al ejecutar código PHP. Aunque existe controversia en cuanto a esto, siendo un paquete oficial de Zend (los autores de PHP), resulta por lógica mucho más confiable que cualquier otro paquete de terceros que podamos utilizar.
# wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz # tar xvzf ZendOptimizer* # cd ZendOpt* # ./install.sh
El proceso terminará por añadir al archivo php.ini un bloque encabezado con [Zend]
# php -v
Debería retornar ahora algo como
PHP x.x.x Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
La configuración de SUHOSIN y XCACHE, cuya instalación veremos ahora, debería ir ENCIMA del bloque [Zend]. De lo contrario al arrancar PHP se quejará con un error como este:
PHP Fatal error: [Zend Optimizer] Zend Optimizer 3.3.3 is incompatible with XCache 1.2.2 in Unknown on line 0
Instalando SUHOSIN
SUHOSIN añade una capa de seguridad a PHP. Sin profundizar, diríamos que es lo mismo que la detección heurística de los antivirus, ya que no protege realmente contra problemas conocidos, sino que protege puntos débiles del mismo núcleo de PHP. Es un proyecto de un ex-programador de seguridad de PHP.
# wget http://download.suhosin.org/suhosin-0.9.27.tgz # tar xvzf suhosin* # cd suhosin* # phpize # ./configure # make # make install
Asegurarse que el archivo generado “suhosin.so” está en el directorio de módulos de php necesario (puede ser /usr/lib/php/modules o bien otro)
Añadir, ENCIMA del bloque de [Zend] en php.ini:
extension = suhosin.so
Instalando XCACHE
XCache se autodescribe como un cacheador de opcode PHP que es rápido, estable, muy probado y que se usa en servidores en producción con muchas visitas. El aumento del rendimiento se nota: sólo tenemos que pensar que en lugar de interpretarse los scripts PHP cada vez y ejecutar el código, directamente se ejecuta el código ya interpretado que está en caché.
Aunque personalmente vengo utilizando ‘PHP opcode cachers’ como EAccelerator y Turck MMCACHE desde hace tiempo, este XCache ha funcionado bien y ha resultado dar menos problemas con los cambios de versión de PHP.
# yum install php-devel # wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz # tar -zxf xcache-*.tar.gz # cd xcache-* # phpize # ./configure --enable-xcache # make # make install
Asegurarse que el archivo generado “xcache.so” está en el directorio de módulos de php necesario (puede ser /usr/lib/php/modules o bien otro)
Añadir la siguiente configuración al php.ini (si lo metemos como archivo INI en /etc/php.d/ no podremos controlar el orden de cargado y no funcionará)
Nota: Primero debe ir la config. de Suhosin, luego XCACHE y finalmente el bloque del Zend Optimizer.
[xcache-common] zend_extension = /usr/lib/php/modules/xcache.so
[xcache.admin] xcache.admin.user = "admin" xcache.admin.pass = "md5password"
[xcache] xcache.shm_scheme = "mmap" xcache.size = 64M xcache.count = 1 xcache.slots = 8K xcache.ttl = 0 xcache.gc_interval = 0 xcache.var_size = 0M xcache.var_count = 1 xcache.var_slots = 8K xcache.var_ttl = 0 xcache.var_maxttl = 0 xcache.var_gc_interval = 3000 xcache.test = Off xcache.readonly_protection = Off xcache.mmap_path = "/dev/zero" xcache.coredump_directory = "/tmp/xcache" xcache.cacher = On xcache.stat = On xcache.optimizer = Off
[xcache.coverager] xcache.coverager = Off xcache.coveragedump_directory = ""
Al final, deberíamos terminar con una salida de “php -v” parecida a esta y sin errores:
# php -v
PHP x.x.x 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 with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies with Suhosin v0.9.27, Copyright (c) 2007, by SektionEins GmbH with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies
2 Comments
Luix
Juan Gabriel Covas
@Luix: Sí, XCache es lo mismo que EAccelerator, una “caché de opcode para PHP”, así que sirve al mismo propósito. Las ventajas que a mí me ha dado en el tiempo es una mayor compatibilidad con versiones de PHP, con varios scripts profesionales (tipo vBulletin), y también menos problemas de instalación que Eaccelerator, si bien este se usa de forma masiva y “estándar”.
Hacer un comentario
Debes iniciar sesión para hacer un comentario.
RECOMENDAMOS:
LO MAS RECIENTE
- Los juegos PIPO en inglés, en PipoGames.com
- MySQL: Cómo hacer una copia de seguridad de todas las bases de datos
- De cómo recuperé una cuenta de messenger después del robo de contraseña
- Muzikomio: descargar la mejor música alternativa de sellos independientes
- Solución: messenger no recuerda la contraseña después de reiniciar (messenger, internet explorer, etc)
- Drivers para RAID ULI220 M1575 – M5288 (Nvidia)
- INND: Cómo montar tu propio servidor de news privado
- PopMonger: Cómo procesar automáticamente los rebotes de correo o “message bounces”
- Vaya Fiasco de Fiasco Awards
- Primeros pasos con un servidor linux remoto… nos dan acceso, ¿y ahora qué?
- Securizando el entorno Linux del servidor
- excelente programa no saben lo que me han ayudado gracias...
- a mi me sale es error en un server x86_64 con centos y mysql 5.x
MEMORY USAGE...
- Excelente ayuda, ahora mi consulta seria como poder acceder desde CentOS a Wind...
- excelente, me partio un archivo de 4.8 gb con 14 millones de registros y en muy ...
- Acabo de probarlo con un archivo de 3 GB y lo particionó muy rápido.
Excelent...
- el archivo era de 1.4 gb y me generó archivos de 64000 lineas 4 mb sin problemas...
- @Luix: Sí, XCache es lo mismo que EAccelerator, una "caché de opcode para PHP", ...
- Hola un saludo cordial. Buena tu guia, tengo una pregunta, xcache me puede servi...
Software - 29 / Mar / 09 - Sin comentarios
PopMonger: Cómo procesar automáticamente los rebotes de correo o “message bounces”
MÁS EN Software
- Cómo crear imágenes GIF animados fácilmente con UnFREEz
- Gif Color Mapper: cambiar un color por otro a cientos de archivos
- PIPO: los juegos para niños de más éxito
- Thunderbird: 3 razones para usar este cliente de correo electrónico
- PaintShopPro 9: El photoshop para programadores
MySQL - 6 / Oct / 09 - Sin comentarios
MySQL: Cómo hacer una copia de seguridad de todas las bases de datos
MÁS EN Servidores
- INND: Cómo montar tu propio servidor de news privado
- Primeros pasos con un servidor linux remoto… nos dan acceso, ¿y ahora qué?
- Securizando el entorno Linux del servidor
- Optimizando MySQL: Tuning-Primer y el archivo de configuración my.cnf
- Afinando la conexión a Secure Shell (SSH)
MundoGeek - 5 / Oct / 09 - Sin comentarios
De cómo recuperé una cuenta de messenger después del robo de contraseña
MÁS EN MundoGeek
- Muzikomio: descargar la mejor música alternativa de sellos independientes
- Solución: messenger no recuerda la contraseña después de reiniciar (messenger, internet explorer, etc)
- Drivers para RAID ULI220 M1575 – M5288 (Nvidia)
- Vaya Fiasco de Fiasco Awards
- Iluminar filas de una tabla con CSS
Hola un saludo cordial. Buena tu guia, tengo una pregunta, xcache me puede servir para una plataforma de educacion a distancia Moodle, el problema es que el chat de moodle esta escrito en php y consume mucho procesador, me recomendaron instalar php accelerator pero xcache me puede servir para el mismo proposito ?. Gracias