Panel de control Plesk
La mayoría del software empaquetado por distribuciones como CentOS, Debian, etc.. viene compilado con un tamaño de
FD_SETSIZE = 1024. La variable
FD_SETSIZE limita el número de descriptores que puede abrir un proceso, es decir, los procesos solo podrán abrir un total de 1024 ficheros, a no ser que se recompile los programas cambiando este parámetro. Si queremos recompilar Apache en un servidor con panel de control Plesk, existe mas información sobre este proceso en un
artículo de la KB de Parallels∞.
Cada VirtualHost configurado en Apache tiene abiertos dos descriptores de fichero como mínimo: uno para el "access_log" y otro para "error_log", uno mas si el alojamiento tiene activado el soporte SSL, fichero "access_ssl_log". Además Apache tiene abiertos otros descriptores para su propio uso, para módulos como mod_security, Tomcat (mod_jk), etc..
Si tenemos un
servidor web configurado con mas de 500 alojamientos bajo Plesk, posiblemente llegará un punto en el que este no arrancará ya que hemos pasado el limite máximo de ficheros abiertos de forma concurrente, establecido por el parámetro
FD_SETSIZE, o estaremos muy cerca del límite máximo, lo podemos calcular con:
(2 FD por VirtualHost * 500 ) + FDs de Apache > 1024
En estos casos al tratar de arrancar Apache nos encontraremos con errores de este tipo:
Segmentation fault (11)
[warn] make_sock: problem listening on port 443, file descriptor (1068) larger than FD_SETSIZE (1024)
Unable to open logs
Too many open files
Para solucionar este error
sin necesidad de recompilar Apache, a partir de Plesk 8.2 existe una funcionalidad "oculta" en el panel de control que permite reducir el uso del número de descriptores de ficheros abiertos. Una vez activada, Apache abrirá una tubería/pipe con la ayuda del programa
pipelog donde todos los VirtualHosts enviarán sus logs y este se encargará de distribuirlos a los ficheros correspondientes. De este modo el número total de descriptores abiertos se reducirá casi a la mitad, ya que no será necesario abrir un "access_log" por cada alojamiento.
Para ello se eliminan todas las directivas **CustomLog** de Apache de todos los VirtualHost (en los ficheros httpd.include) y se establece una definición a nivel global para todo el servidor en el fichero
zz010_psa_httpd.conf, quedando definida como:
CustomLog |/usr/local/psa/admin/sbin/pipelog plesklog
Existe mas información sobre la funcionalidad "piped logs" para Apache en servidores con Plesk en el artículo
KB#2066∞ de Parallels.
Para activar este sistema en Plesk, es necesario hacer un cambio en la BBDD "psa", volver a reconfigurar todos los alojamientos con "
websrvmng" y finalmente reiniciar el servidor Apache:
# mysql -uadmin -p`cat /etc/psa/.psa.shadow` psa -e "REPLACE INTO misc (param,val) VALUES ('apache_pipelog', 'true');"
# /usr/local/psa/admin/sbin/websrvmng -v -a
# /etc/init.d/httpd graceful
Podemos comprobar los efectos de activar
pipelog revisando los ficheros que abre Apache antes y después del cambio, está información esta accesible vía "
/proc/$PID/fd", donde
$PID se corresponde el ID del proceso de Apache, ejemplo:
# ls -l /proc/`pidof -s httpd`/fd | wc -l
280
Una vez activado este sistema, podremos realizar diversos "hacks" para monitorizar la actividad y escrituras en logs de Apache, para determinar que ficheros se abren, que dominio está teniendo mas visitas, etc.. Por ejemplo, este script refrescará cada segundo el fichero de log sobre el cual está escribiendo Apache en ese momento:
# watch -n1 ls -l /proc/`pidof pipelog`/fd
Históricamente uno de los mayores problemas ligados al panel de control Plesk ha sido la dificultad o las pocas herramientas que ponía SWSoft/Parallels para poder
configurar mas de 500 alojamientos por servidor, debido a la limitación del parámetro
FD_SIZE. Dicha dificultad no la impone el panel de control por si mismo, si no otras aplicaciones que dependen de este, como por ejemplo el servidor web Apache. En cambio otros paneles como cPanel, siempre han tenido herramientas para hacer este cambio de forma muy sencilla.. Sin duda alguna se trata de una estrategia comercial por parte de SWSoft/Parallels para dar empuje a otro de sus grandes productos: el sistema de virtualización Virtuozzo. Así, dividiendo el servidor físico en pequeños servidores virtuales no se alcanza el límite de FD_SIZE, a coste de pagar una licencia de Virtuozzo..
NOTA (2008-05-14): Activando este método se produce un doble logeo de los accesos, uno en el access_log de cada VirtualHost y un segundo en el access_log genérico, en CentOS el fichero es /var/log/httpd/access_log. Se trata de un bug que todavía no tiene solución en Plesk 8.4, la solución pasa por comentar la linea
"CustomLog logs/access_log" en el fichero /etc/httpd/conf/httpd.conf y reiniciar Apache.