Article ID: 260, created on Jan 23, 2009, last review on Sep 23, 2014

  • Applies to:
  • Plesk for Linux/Unix

Síntomas

Los paquetes RPM son compilados por los vendedores con un demasiados pocos descriptores de archivos (1024), lo que puede ocasionar la aparición de los siguientes mensajes en /var/log/httpd/error_log:

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

Se trata de una incidencia común de Apache que se experimenta en servidores que tienen configurados un gran número de hosts virtuales. Para más información, visite http://httpd.apache.org/docs/2.0/misc/descriptors.html.

Resolución

NOTA: a partir de Plesk 8.2.0 en la build de Apache del fabricante del SO pueden alojarse hasta 900 dominios sin recompilación de paquetes de sistema, tal y como se describe en este artículo. Si la prestación 'Piped Logs' (registros redireccionados) está activada en el servidor Plesk, consulte este artículo.

NOTA: este artículo es específico para sistemas operativos Linux que dispongan de una estructura de paquetes RTM, como por ejemplo RHEL, Fedora, CentOS y SuSE.

Si desea información detallada acerca del sistema Debian, consulte este artículo.

Si desea información detallada acerca del sistema FreeBSD, consulte este artículo.

NOTA: Plesk requiere muchas aplicaciones de servidor que no forman parte de Plesk. Por ejemplo, el servidor web Apache, MySQL Server, módulos PHP y ejecutables y muchos otros elementos no son compilados ni proporcionados por Parallels. De todos modos, los paquetes RPM de sistema estándar del vendedor del sistema operativo son usados por Plesk 'tal cual'. Así, el administrador puede actualizar y volver a compilar estos paquetes con las opciones deseadas. La finalidad de este artículo es ayudar a los administradores de Plesk a configurar aquellos SOs y paquetes de sistema que no estén incluidos en la distribución de Plesk para así poderlos utilizar con un gran número de dominios alojados.

Es necesario volver a compilar las aplicaciones y librerías relacionadas, como es el caso de openssl, apache, imap, PHP, etc., desde RPMs de origen con un valor superior de "FD_SETSIZE". Realice los pasos detallados a continuación.

Compruebe que el sistema le permite abrir suficientes archivos:

# /sbin/sysctl fs.file-max
fs.file-max = 131072

Si el valor de fs.file-max es bastante pequeño (varios millares, por ejemplo), debería cambiarse añadiendo las siguientes líneas a /etc/sysctl.conf:

fs.file-max = 131072

Ejecute el comando shell:

# /sbin/sysctl -w fs.file-max=131072

NOTA: si está ejecutando Parallels Containers, deberá ajustar fs.file-max en el nodo hardware y este se aplicará a todos los VEs.

Debería tener instalados los paquetes glibc-kernheaders y glibc-headers. Estos pueden extraerse del CD de la distribución del sistema operativo o bien descargarse en los sitios de descarga del sistema operativo pertinente. Edite el valor FD_SETSIZE en los archivos typesizes.h y posix_types.h, que pueden encontrarse con lo siguiente:

# find /usr/include/ -name typesizes.h
# find /usr/include/ -name posix_types.h

Establézcalos a lo siguiente:

#define __FD_SETSIZE 65536

Descargue los siguientes RPMs de origen, que pueden obtenerse en los sitios de descarga de su sistema operativo o en sitios similares. Puede usar motores de búsqueda de RPMs como http://rpm.pbone.net o http://rpmfind.net:

  • openssl-*.src.rpm
  • httpd-*.src.rpm
  • imap-*.src.rpm
  • php-*.src.rpm
  • libc-client-devel-*.src.rpm (si dicho RPM está instalado)
  • curl-*.src.rpm

En primer lugar, vuelva a compilar openssl. Por ejemplo:

# /usr/bin/rpmbuild --rebuild openssl-0.9.7a-35.src.rpm

Instale el RPM openssl compilado con la siguiente línea de comandos:

# rpm -Uvh --force /usr/src/redhat/RPMS/i386/openssl-0.9.7a-35.i386.rpm

Repita la misma operación para cURL.

Vuelva a compilarlo e instale apache:

# rpmbuild --rebuild httpd-2.0.51-2.9.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/httpd-2.0.51-2.9.i386.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/httpd-devel-2.0.51-2.9.i386.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/mod_ssl-2.0.51-2.9.i386.rpm

Vuelva a compilarlo e instale la librería libc-client, proporcionada por los paquetes imap o libc-client-devel (en función del SO). Debe volver a compilar la librería que esté instalada en el sistema. Por ejemplo:

# /usr/bin/rpmbuild --rebuild imap-2002d-3.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/imap-devel-2002d-3.i386.rpm

O

# /usr/bin/rpmbuild --rebuild libc-client-devel.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/libc-client-devel.rpm

Vuelva a compilarlo e instale PHP. Por ejemplo:

# rpmbuild --rebuild php-4.3.10-2.4.src.rpm
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/php-*

Añada un comando ulimit -n 65536a los scripts de arranque /etc/rc.d/init.d/httpd y /usr/sbin/apachectl de Apache antes que otros comandos.

Reemplace /usr/sbin/suexec por el de Plesk:

# cp /usr/local/psa/suexec/psa-suexec /usr/sbin/suexec
# /etc/init.d/httpd restart

En el caso de versiones de Plesk anteriores a la versión 7.5, use los siguientes comandos:

# cp /usr/local/psa/suexec/psa-suexec /usr/sbin/suexec
# chown root:apache /usr/sbin/suexec
# chmod 4510 /usr/sbin/suexec
# /etc/init.d/httpd restart

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c 29d1e90fd304f01e6420fbe60f66f838

Email subscription for changes to this article
Save as PDF