[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Apache2 y dudas con la llamada al sistema open();



Hola,

Tengo un servidor Debian Sarge 3.1 con Apache 2. Las versiones de los paquetes instalados son las siguientes:

# COLUMNS=140 dpkg -l | grep apache
ii apache2 2.0.54-4 next generation, scalable, extendable web server ii apache2-common 2.0.54-4 next generation, scalable, extendable web server ii apache2-mpm-prefork 2.0.54-4 traditional model for Apache2 ii apache2-prefork-dev 2.0.54-4 development headers for apache2 ii apache2-utils 2.0.54-4 utility programs for webservers ii libapache2-mod-perl2 1.999.21-1 Integration of perl with the Apache2 web server ii libapache2-mod-php4 4.3.10-15 server-side, HTML-embedded scripting language (apache 2.0 module) ii libapache2-mod-python 3.1.3-3 An Apache module that embeds Python within the server ii libapache2-mod-python2.3 3.1.3-3 An Apache 2 module that embeds Python 2.3 within the server ii libapache2-mod-security 1.8.7-1 Tighten web applications security for Apache 2.x ii libapache2-mod-webapp 4.1.29-debian3.1.build7505050 libapache2-mod-webapp is Apache module, that makes WARP connection

Mas información sobre la compilación de Apache:

# apache2ctl -V
Server version: Apache/2.0.54
Server built:   May 12 2005 05:30:44
Server's Module Magic Number: 20020903:9
Architecture:   32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/usr/lib/apache2/suexec2"
-D DEFAULT_PIDLOG="/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

Tiene configurados mas de 270 virtualhosts y al arrancar falla debido a que se alcanza el número máximo de ficheros abiertos por proceso, que en Debian para el usuario root es de 1024. La explicación es que por cada dominio se abren 4 ficheros, error_log, error_ssl_log, access_log y access_ssl_log. A esto se le tiene que sumar los ficheros de configuración, módulos, librerías, etc. lo que hacen que se llegue a mas de 1024 y Apache no pueda arrancar.

De momento, lo he solucionado editando el fichero /etc/security/ limits.conf y permitiendo al usuario "root" y "www-data" que puedan abrir hasta 5000 ficheros por proceso, no se si será necesario darle también este permiso al usuario www-data pero por si acaso:

root            hard    nofile  5000
www-data        hard    nofile  5000

Los ficheros /etc/pam.d/{login,ssh} tiene la siguiente linea "session required pam_limits.so".

Por ahora funciona, y cada hijo de Apache está abriendo mas de 1024 ficheros simultáneamente.

Buscando información he encontrado a gente con el mismo problema y comentan que esta solución no es valida ya que se requiere compilar Apache modificando las variable __FD_SETSIZE de la glibc, que en mi caso se encuentra en el fichero "/usr/include/bits/typesizes.h".

Preguntas:

* ¿Alguien se ha encontrado con este problema de Apache2?
* ¿Quien decide cuando dejar de dar descriptores de ficheros a un proceso? ¿Lo decide Linux, la glibc, el interprete, el propio programa debido a su programación interna, o quien?

Saludos,

--
Santi Saez





Reply to: