Para poder diagnosticar qué sucede en la máquina cuando se ejecuta un script en php es necesario instalar un depurador o profiler. En este caso instalamos Advanced Php Debugger.
En máquinas Centos, como es usual no lo tenemos en el repositorio así lo instalaremos manualmente usando ‘pecl‘ que lo provee el paquete de php-pear .
pecl install apd
Será necesario tener instalado make, gcc y autconf
Nos podemos encontrar con este error :
# pecl install apd WARNING: channel "pear.php.net" has updated its protocols, use "channel-update pear.php.net" to update downloading apd-1.0.1.tgz ... Starting to download apd-1.0.1.tgz (36,643 bytes) ..........done: 36,643 bytes 15 source files, building running: phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 building in /var/tmp/pear-build-root/apd-1.0.1 running: /tmp/pear/download/apd-1.0.1/configure checking for egrep... grep -E checking for a sed that does not truncate output... //bin/sed checking for cc... cc checking for C compiler default output file name... a.out checking whether the C compiler works... configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details. ERROR: `/tmp/pear/download/apd-1.0.1/configure' failed
Normalmente es debido a que tenemos /var y /var/tmp con la opcion de noexec. Para poder ejecutarlo correctamente pondremos temporalmente estos puntos de montaje con permisos de ejecución y luego lo restauramos:
mount -o,remount,rw,exec /var/tmp mount -o,remount,rw,exec /tmp pecl install apd mount -o,remount,rw,noexec /var/tmp mount -o,remount,rw,noexec /tmp
Nos insteresa quedarnos con este contenido para configurar el fichero .ini :
running: make INSTALL_ROOT="/var/tmp/pear-build-root/install-apd-1.0.1" install Installing shared extensions: /var/tmp/pear-build-root/install-apd-1.0.1/usr/lib64/php/modules/ running: find "/var/tmp/pear-build-root/install-apd-1.0.1" | xargs ls -dils 12 1 drwxr-xr-x 3 root root 1024 Jul 23 18:33 /var/tmp/pear-build-root/install-apd-1.0.1 2057 1 drwxr-xr-x 3 root root 1024 Jul 23 18:33 /var/tmp/pear-build-root/install-apd-1.0.1/usr 4113 1 drwxr-xr-x 3 root root 1024 Jul 23 18:33 /var/tmp/pear-build-root/install-apd-1.0.1/usr/lib64 6169 1 drwxr-xr-x 3 root root 1024 Jul 23 18:33 /var/tmp/pear-build-root/install-apd-1.0.1/usr/lib64/php 8225 1 drwxr-xr-x 2 root root 1024 Jul 23 18:33 /var/tmp/pear-build-root/install-apd-1.0.1/usr/lib64/php/modules 8226 129 -rwxr-xr-x 1 root root 130196 Jul 23 18:33 /var/tmp/pear-build-root/install-apd-1.0.1/usr/lib64/php/modules/apd.so Build process completed successfully Installing '/usr/lib64/php/modules/apd.so' install ok: channel://pear.php.net/apd-1.0.1
Tendremos que crear un fichero en /etc/php.d/apd.ini con este contenido
zend_extension = /usr/lib64/php/modules/apd.so apd.dumpdir = /tmp apd.statement_tracing = 0
y comprobamos que el modulo carga con php -m
#php -m .... [Zend Modules] Advanced PHP Debugger (APD) Zend Optimizer
Ahora ya podemos lanzar el profiling en nuestras páginas, para ello podemos incrustar este fragmento de código y activarlo sólamente cuando accedamos nosotros y no los clientes:
<?php $DEBUGIPS = array('93.174.6.8','192.168.1.1'); if(array_search($_SERVER[REMOTE_IP], $DEBUGIPS)) { apd_set_pprof_trace(); } ?>
Y con esto acabamos la primera parte, atentos a la segunda 😀
Deja una respuesta