1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Apache consume demasiada RAM

Tema en 'Servidores Dedicados' iniciado por PDD_20, 16 Mar 2009.

  1. PDD_20

    PDD_20 Usuario activo

    Hola, resulta que tengo un nuevo VPS de 512Mb de RAM y hasta 2Gb de RAM dinamica. Tiene Virtuozzo y Plesk.

    He configurado Apache mejor de lo que viene por defecto:

    StartServers 8
    MinSpareServers 5
    MaxSpareServers 20
    ServerLimit 100
    MaxClients 100
    MaxRequestsPerChild 10000


    Y el cambio ha hecho que el kmemsize (The size of unswappable kernel memory allocated for the internal kernel structures for the processes of a particular VPS.) me de algunas alertas de vez en cuando.

    Lo que si he visto que cada proceso de Apache me consume 20Mb!!, me parece mucho para lo que consume mi PHP optimizado con Xcache de Zend: entre 1mb y 2mb.

    ¿Que debo hacer? ¿Como reduzco esa gran cantidad de consumo?

    Saludos y gracias.
     
  2.  
  3. MaxKiller

    MaxKiller Usuario activo

    ¿Tu servidor es administrado? Si es así, pide al soporte que te lo optimicen.

    Saludos :aprueba:;)
     
  4. infranetworking

    infranetworking Usuario activo

    Hola!

    ¿Probaste aumentar la cantidad de conexiones? Es que 100 lo encuentro muy bajo realmente. Pónlo en 256 mínimo y prueba nuevamente.

    ¿Qué valor tiene el keepalive? on u off? Prueba cambiarlo también para ver si ganas estabilidad en la aplicación.

    Un saludo,
    Daniel.-
     
  5. PDD_20

    PDD_20 Usuario activo

    Hola, no es administrado. Tengo acceso total y todo va de mi cuenta, nada de soporte.

    El Keepalive esta en On, es que en Off no se lleva ya eso mucho...:S Y lo de 256, lo tenia antes en 256 pero eso da igual :S

    Salu2 y gracias.
     
  6. MaxKiller

    MaxKiller Usuario activo

    Prueba con estos valores:

    KeepAlive On
    KeepAliveTimeout 5
    StartServers 5
    MinSpareServers 2
    MaxSpareServers 10
    ServerLimit 100
    MaxClients 250
    MaxRequestsPerChild 10000
     
  7. infranetworking

    infranetworking Usuario activo

    Max, si el ServerLimit lo tienes en 100, será imposible poner el MaxClients en 250.

    Sobre lo del keepalive, yo probaría ponerlo en off. Al ser contenido activo (php-mysql) no te influirá para nada y ahorrarás muchísima memoria.... pruébalo y me cuentas.

    Un saludo!
    Daniel.-
     
  8. PDD_20

    PDD_20 Usuario activo

    Hola.

    Si bajo los valores aun mas voy a tener el problema que ya tuve, que no se creaban suficientes procesos y la web tardaba en responder.

    En cuanto al keepalive en off, si lo pongo en off no podre tener varias peticiones por conexion, y los elementos de la web tardaran en cargar.

    Lo que necesito es reducir el consumo de cada procesos Apache, que no entiendo porque consume tanto si mis aplicaciones php consumen tan solo 1mb.

    Gracias
     
  9. infranetworking

    infranetworking Usuario activo

    PDD,

    yo lo que le decía a Max, es que no se puede fijar un número superior en el maxclient que en el serverlimit, porque justamente la variable serverlimit es la que limita la cantidad que podrás poner en el maxclients...

    Sobre lo del keepalive, pruébalo y me cuentas... ya te digo que con las conexiones basadas en php y consultas mysql no notarás diferencia alguna.

    Los demás valores los puedes dejar como habías probado tu.

    No pierdes nada con probarlo ;)
     
  10. infranetworking

    infranetworking Usuario activo

    Léete el uso del keepalive:

    "However, Keep-Alive support only is active with files where the length is known beforehand. This means that most CGI scripts, server-side included files and directory listings will not use the Keep-Alive protocol. While this should be completely transparent to the end user, it is something the web-master may want to keep in mind."

    Extraído de httpd.apache.org/docs/1.3/keepalive.html

    Con esa variable notarías cambios en html estático, y en compartido con php es totalmente transparente.
     
  11. PDD_20

    PDD_20 Usuario activo

    Hola.

    Lo he probado, y es cierto lo que dices. No se nota pero tampoco se ha notado en los 20mb que siguen consumiento aun :(

    Salu2
     
  12. MaxKiller

    MaxKiller Usuario activo

    Hola Daniel,

    Gracias por la corrección. Es el valor que venía por defecto en mi VPS de WT.

    He preguntado si el valor ServerLimit limita al MaxClients y me han respondido ésto:

    ¿Qué opinas respecto a la respuesta del soporte?

    Saludos :aprueba:;)
     
  13. infranetworking

    infranetworking Usuario activo

    Mi opinión de la respuesta del soporte (haré de Simon el de American Idol :p) es la siguiente:

    DESASTROZA, HORRENDA, te diría: "Que jamás toquen tu servidor los de ese soporte" :p

    (me refiero justamente a la parte que marcas en negritas)

    Ahora volviendo a la normalidad, te comento:

    La directiva ServerLimit, se utiliza cuando necesitarás más de 256 conexiones de apache, ya que ese es el valor que viene por defecto en la compilación en las versiones 2.xxx (antes esa directiva no existía). Así, en las versiones anteriores de apache, cuando necesitabas, más de 256 conexiones, simplemente cambiabas el valor de MaxClients, y listo! Hasta 2048 lo podías subir sin necesidad de recompilar el apache, de otro modo, directamente ignoraba los números superiores a 2048 (hablo en casos generales).

    Luego de la versión 2 de Apache, es la directiva ServerLimit, la que determina qué cantidad de RAM será asignada para las conexiones que habilites. Ten presente que, si pones el server limit en 2000 y el maxclients en 1000, apache reservará RAM suficiente para 2000 conexiones aunque estés limitándolo a 1000.

    Por ese motivo, el valor de la variable ServerLimit, siempre tiene que ser IGUAL o MAYOR que el del maxclients, por la sencilla razón de que apache ignorará las conexiones que estás colocando SOBRE el número de ServerLimit. Si el serverlimit lo tienes en 2000 y el maxclients en 4000, 2000 serán las conexiones permitidas por apache.

    Lo mejor que puedes hacer para sacarte las dudas es consultar la información de la propia página de apache: apache.org.

    "En servidores que no usan hebras (por ejemplo, prefork), el valor especificado en MaxClients se traduce en el número máximo de procesos hijo que se crearán para atender peticiones. El valor por defecto es 256; para incrementarlo, debe incrementar también el valor especificado en la directiva ServerLimit."

    httpd.apache.org/docs/2.0/mod/mpm_common.html#maxclients

    Aquí tienes información sobre el ServerLimit también:

    httpd.apache.org/docs/2.0/mod/mpm_common.html#serverlimit

    Cualquier cosa me avisas, y si tienes problemas configurando esas variables, nos comentas, y vemos qué configuración te podemos recomendar.

    Quizás no hayas tenido problemas, porque tu maxclients estaba por debajo de los 256, pero estoy seguro que si intentas poner sobre ese número al restartear apache te saldrá un mensaje en el shell de este estilo:

    "Starting web server: apache2WARNING: MaxClients of 350 exceeds ServerLimit value of 256 servers, lowering MaxClients to 256. To increase, please see the ServerLimit directive"

    Incluso apache te levantará bien sin problemas, pero NO TOMARA el cambio de cantidad de conexiones superior a 256.... a menos que también subas el valor de ServerLimit :)

    Un abrazo!
    Daniel.-
     
  14. PDD_20

    PDD_20 Usuario activo

    Hola, gracias por la explicacion. Ya he formteado para a ver si cambiaba la cosa y parece que no tengo problemas con la memoria del kernel pero los procesos siguen consumiendo 20mb, que debo hacer para reducirlo?

    Salu2 y gracias.
     
  15. MaxKiller

    MaxKiller Usuario activo

    Hola Daniel,

    Muchísimas gracias por la explicación y por el ofrecimiento, así mismo de tu amabilidad :)

    He contestado al soporte con la referencia (en inglés) de la documentación de Apache, a ver con qué cara me responden. Quiero pensar que ha sido un lápsus y que todos cometemos errores.

    Estás hecho un crack :-D

    Saludos :aprueba:;)
     
  16. Apolo

    Apolo Administrador Miembro del Staff Administrador CH

    Yo también quiero pensar lo mismo, aunque la verdad de WiredTree no me extraña. Y aún así me pregunto por qué tienen tantos seguidores. No digo que sean malos, pero no son todo lo "bueno" que prometen...

    En efecto, manejo la misma versión que ha comentado Daniel:

    "el valor de la variable ServerLimit, siempre tiene que ser IGUAL o MAYOR que el del MaxClients".

    Saludos. :aprueba:
     
  17. MaxKiller

    MaxKiller Usuario activo

    Ya me lo han aclarado. Dicen que ellos usan por defecto el módulo MPM prefork (comprobado), entonces en la documentación de Apache dice así:

    Me han pedido disculpas por la confusión.

    Entonces tanto el técnico de WT como Daniel estaban en lo correcto, sólo ha sido una pequeña confusión por parte de WT que creían que les hablaba de la configuración por defecto en sus VPS (con el módulo MPM prefork).

    Apolo, llevo ya más de dos meses en WiredTree y me funciona muy muy bien. El soporte es fantástico y ultra rápido, me han ayudado hasta con software de terceros (servidor de juegos, SHOUTcast, etc).

    Pero en fin, es lo de siempre, a alguien le va bien y a otro no. :-D

    Saludos :aprueba:;)
     
  18. infranetworking

    infranetworking Usuario activo

    Hola Max!!!

    "Con el módulo MPM prefork, use esta directiva solamente si necesita especificar en la directiva MaxClients un valor mayor a 256 (el valor por defecto). No especifique un valor mayor del que vaya a especificar en la directiva MaxClients."

    Esto es 100% CIERTO! pero observa que dice textualmente, "no especifique un valor MAYOR del que vaya a especificar en la directiva MaxClients", pero NO DICE que el valor de ServerLimit tenga que ser MENOR. En el módulo MPM prefork es cierto que la aplicación de la directiva MaxClients es distinta, pero igualmente si necesitas aumentarla, debes también aumentar la variable ServerLimit, aunque la misma, acompañe al valor de la anterior. Jamás ví ninguna configuración razonable en donde el ServerLimit esté por debajo del MaxClients, por la sencilla razón de que si, por ejemplo, ServerLimit está en 1000 y MaxClients en 2000... el valor inicial, es decir, 1000 será el valor de conexiones concurrentes... entonces, ¿qué aplicación tendría poner el MaxClients en 2000? Francamente ninguna. Entonces, en ese caso se ubican ambos valores en 1000 y listo, porque no tiene aplicación práctica alguna poner un valor más alto en la variable MaxClients sobre ServerLimit.

    Esta aclaración te lo hago por este comentario que inicialmente te habían dicho:

    "The ServerLimit Directive is responsible for the upper limit on configurable number of processes and MaxClients Directive is the maximum number of child processes that will be created to serve requests. The value of the ServerLimit should be always lower than the value of MaxClients. "

    Esa parte del comentario "The value of the ServerLimit should be always lower than the value of MaxClients" es totalmente errónea, y sea el módulo que sea de apache, el valor de ServerLimit debe ser mayor, o (dependiendo del módulo) igual al de MaxClients.

    Bueno, lo dicho, cualquier cosa estoy a la órden.

    De paso, pregunto a PDD_20, ¿pudiste resolver el problema? ¿De qué se trataba? (si pudiste). Y si no conseguiste solucionarlo, bríndanos más pistas, a ver si te podemos dar alguna ayuda.

    Un saludo!
    Daniel.-
     
  19. PDD_20

    PDD_20 Usuario activo

    Hola, sigue igual. Os envio la salida del comando top:


    12024 root 18 0 10672 1244 1024 S 0 0.1 0:00.00 mysqld_safe
    12072 mysql 15 0 287m 54m 6296 S 0 2.7 1:35.22 mysqld
    12235 root 16 0 278m 22m 7144 S 0 1.1 0:10.07 httpd
    18430 apache 16 0 281m 30m 12m S 0 1.5 0:02.73 httpd
    13633 apache 16 0 281m 29m 10m S 0 1.5 0:01.46 httpd
    15994 apache 16 0 282m 34m 15m S 0 1.7 0:01.49 httpd
    19638 apache 15 0 281m 33m 15m S 0 1.7 0:01.08 httpd
    23986 apache 16 0 284m 36m 14m S 0 1.8 0:00.68 httpd
    23990 apache 15 0 281m 32m 13m S 0 1.6 0:00.77 httpd
    25824 apache 16 0 281m 29m 10m S 0 1.4 0:00.50 httpd
    26300 apache 15 0 281m 29m 10m S 0 1.4 0:00.55 httpd
    26301 apache 16 0 281m 30m 11m S 0 1.5 0:00.81 httpd
    29783 apache 16 0 281m 30m 11m S 0 1.5 0:00.52 httpd
    29786 apache 16 0 281m 28m 9748 S 0 1.4 0:00.40 httpd
    29787 apache 16 0 281m 28m 9932 S 0 1.4 0:00.37 httpd
    32247 apache 16 0 281m 28m 9.8m S 0 1.4 0:00.21 httpd
    32252 apache 16 0 281m 28m 9.8m S 0 1.4 0:00.27 httpd
    32268 apache 16 0 281m 28m 10m S 0 1.4 0:00.20 httpd


    Salu2 y gracias.
     
  20. MaxKiller

    MaxKiller Usuario activo

    Gracias de nuevo Daniel, paso nota a WT. :)

    Un saludo :aprueba:;)
     
  21. MaxKiller, aún te acabaran contratando para soporte técnico, jeje. :lol:

    Saludos,
     


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·