Ayer nos pasó de nuevo. Sobre las 20:30 pm el post de los centros comerciales polacos y las adolescentes nos llevó a la portada de meneame y el servidor se nos cayó a los pocos minutos. Esta vez con un servidor privado virtual con 512 MB Dedicated Memory DOUBLE RAM y 1024 MB Swap. El servidor se quedó frito. Aqui os pongo algunas graficas de la cpu y del trafico.
Nuestro amado proveedor nos apuntó que debíamos investigar y optimizar correctamente nuestro vps dado que se habia quedado sin memoria o bien upgradear a un nivel superior. Solo nos dan buenas noticias (modo sarcasmo on). Nuestro desconocimiento de linux y de apache es patente y mientras los tres socios nos tiramos de los pelos mientras investigamos el httpd.conf, los scripts, las estadisticas, etc, nuestro nuevo flamante servidor continua dandonos sinsabores.
Aqui os adjunto el estado de la memoria en la noche de autos:
DMA per-cpu:
cpu 0 hot: high 186, batch 31 used:57
cpu 0 cold: high 62, batch 15 used:50
DMA32 per-cpu: empty
Normal per-cpu: empty
HighMem per-cpu: empty
Free pages: 2908kB (0kB HighMem)
Active:46069 inactive:32771 dirty:0 writeback:0 unstable:0 free:727 slab:6608 mapped-file:1 mapped-anon:89845 pagetables:19950
DMA free:2908kB min:2916kB low:3644kB high:4372kB active:184276kB inactive:131084kB present:532480kB pages_scanned:180606697 all_unreclaimable? yes
lowmem_reserve[]: 0 0 0 0
DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0 0 0
DMA: 1*4kB 7*8kB 16*16kB 3*32kB 1*64kB 1*128kB 1*256kB 0*512kB 0*1024kB 1*2048kB 0*4096kB = 2908kB
DMA32: empty
Normal: empty
HighMem: empty
95 pagecache pages
Swap cache: add 501141, delete 501090, find 37256/69276, race 37+281
Free swap = 0kB
Total swap = 1048568kB
A partir de las 07:50 y despues de rebotar por enesima vez y cuando nuestro post abandonó la portada de meneame y paso a la pagina 2, la cosa comenzó a funcionar de nuevo. Por la mañana, teníamos alrededor de 50 usuarios conectados concurrentes sin problemas. Esta claro que necesitamos un gurú que nos eche un cable. Alguien que domine al apache, y al resto de tribus de nuestro servidor. ¡¡ Se admite cualquier tipo de ayuda.!!
Pingback: Bitacoras.com
Pingback: Efecto meneame. La portada asesina
Propuestas:
optimizar código – posible mejora drástica
optimizar base de datos – posible mejora.
cache en la ram – mejora drástica. Trivial si el código es bueno y lo conoces.
probar con el servidor web nginx – posible mejora drástica.
no usar php – en este sentido, php és la peor de todas las opciones. La mejor, java.
Por lo básica que es tu pregunta, asumo que no tienes experiencia en web o es muy básica (no significa que no lleves años), por lo que la curva de aprendizaje puede ser dura.
Cachea la página. Eso es todo.
Lighttpd o nginx van muy bien, pero son mas complicados de administrar que apache, y su ventaja está en que usan fastcgi en vez de mod-php. Para evitar eso yo uso apache con fastcgi -que también se puede-, de forma que siempre sabes cuanta memoria vas a usar como máximo (no crece apreciablemente con el numero de clientes). También uso una caché de opcode (php-apc).
Ah, y si el server toca la swap está muerto al instante, así que no la tengáis en cuenta.
(Paca Loca, java es probablemente la *peor* solucion del mundo si tienes poca memoria…)
Aparte de las ya expuestas, recomiendo limitar el Apache para que no acepte más de X conexiones simultaneas ( el X depende de la memoria que tengais y de lo que necesite la web ) De forma que el usuario X+1, no pueda visualizar la web. Desde luego es algo de poco gusto, pero evita la muerte del servidor y el cabreo de tu proveedor. Pasado el peligro el servidor seguirá funcionando como de costumbre.
El uso de Java, del lado servidor, es, en terminos de rendimiento una absoluta pesadilla. No sólo es un código semicompilado, sino que se ejecuta en una máquina virtual. Es el lenguaje menos eficiente que conozco. No quiero decir malo, que tiene sus vitudes como otros, pero si tu problema es velocidad y consumo, olvidalo.