Apache Alta carga Concurrencia (CentOS)

Forums: 

Señores cordial saludo

Tengo la siguiente configuración
• Centos release 5.6 (final)
• Apache httpd 2.2.3 (centOs)
• php-5-.1.6-32-el5
• Intel XEON CPU E5520 @ 2.27 Ghz cache 8192 KB
• Numero de procesadores 4
• Memoria Total 3.1 GB

Del tema de usuarios concurrentes para Apache no conozco, que software puedo emplear para realizar pruebas de carga para 200 usuarios concurrentes, y que modificaciones debo hacer en el servidor, bien sea Apache, PHP, Cache y demás para garantizar que me pueda manejar 200 usuarios concurrentes.

El software es un interno que funciona sobre PHP y una base de datos en Postgres, ya se ha probado con 200 usuarios concurrentes pero se pone muy lento cuando todos ingresan al mismo tiempo, pero necesito mejorar esto.

He leído acerca de MPM apache que hay dos opciones Prefork y Worker. Eso en cuanto a las solicitudes de Apache, y otra prueba que creo se debería realizar en cuanto al funcionamiento del software PHP y en donde están los cuellos de botella.

En el PHP no creo que tengas

Imagen de deathUser

En el PHP no creo que tengas los problemas, ya que los procesos que te permita ejecutar serán los mismos que te deje Apache ya sea como módulo o como CGI, lo que puedes tener problemas de concurrencia es a nivel de base de datos y otro tipo de I/O, mira la configuración en cuanto al número de conexiones, estás usando un pool de conexiones ...??? tienes acceso a archivos ...??? como está de recursos el equipo con la carga de 200 usuarios concurrentes, es probable que necesites más memoria, procesador, etc ... podrías incluso pensar en un cluster de alto rendimiento y balancear la carga ...

Asegúrate de que tengas cada parte del sistema preparada para atender a 200 usuarios concurrentes y luego monitorea la carga sobre el equipo a ver si necesitas más recursos dependiendo del sistema, 3GB de RAM se me hace muy poco ...

bye
;)

Revisando un poco este post

Hola deathUser, Estoy revisando un poco mas en detalle cada una de las sugerencias que planteas.

[quote] lo que puedes tener problemas de concurrencia es a nivel de base de datos [/quote]
Como puedo optimizar esta concurrencia de base de datos que planteas ?

Quier acotar que ya hice unos avances http://www.ecualug.org/2012/07/09/forums/apache_alta_carga_concurrencia_centos#comment-59007

En cuanto a un Pool de conexiones.. si, pues están en una intranet.. que pasa por varios Swchites.. y hay una conexión de fibra óptica. no sé si a eso te refieres. ??? me gustaría poder medir si por ahí esta el cuello de botella. ¿Cómo podría medir eso? con un ping ? o hay algo mas especializado ?

monitorea la carga sobre el equipo a ver si necesitas más recursos.. También me gustaría saber como monitoreo la carga sobre el equipo pues voy hacer una simulacro con 100 personas por ahora y me gustaría monitorear esto pero no sé como :S

Gracias

A lo que me refería en ese

Imagen de deathUser

A lo que me refería en ese comentario es a que si bien puedes tener 200 workers configurados en el apache, puede que no estén configuradas el suficiente número de conexiones hacia la base de datos, no recuerdo si el default para MySQL es de 100 conexiones, con lo que te faltarían 100 en el peor de los escenarios, aumenta el número de conexiones al menos a 200, aunque deberías poner unas 10 más para tareas administrativas, monitoreo, etc ...

En cuanto al pool de conexiones, ESTE es el concepto al que me refiero, no he usado ningún pool de conexiones en PHP explícitamente, aunque creo que symfony lo maneja pero no estoy seguro y tampoco aplica a tu caso, no se si moodle maneje algún esquema de pooling de conexiones y tampoco si exista un software de pooling de conexiones que te las maneje externamente a la aplicación, algo como pg_pool para PostgreSQL...

Adicionalmente debes tomar en cuenta que cada conexión te consume CPU y memoria, para tenerlo en cuenta en el dimensionamiento del hardware ...

En cuanto a como monitorearlo tienes muchas alternativas, como top, sar, e incluso sistemas como munin, nagios, etc ...

bye
;)

Contras de Modo Worker Apache

[quote]Los “contras” del modo worker es que el módulo de php para apache no es compatible con él y en lugar de ello deberemos utilizar el módulo de cgi.[/quote]

Que de cierto hay en esas palabras ? Y por el momento con AB (Apache Benchmark) he tenido buenos resultados. Pero como hago para realizar un test una vez el usuario haga LogIn ?. Porque con AB solo pude hacer test a la pagina de inicio del login de mi aplicación web a probar ..

Gracias

Tu software no usa ningún

Imagen de deathUser

Tu software no usa ningún framework para pruebas unitarias ...???

Sin eso le veo difícil, bueno, puedes crearte una página que simule el login y algunas acciones típicas de tu sistema y hacer pruebas con estas ...

bye
;)

Cambiando el asusnto

Bueno ha cambiado un poco el panorama.. Ahora si voy a usar un framework conocido y es Moodle... Entonces la pregunta que tengo como garantizar que moodle me funcione bien para 200 usuarios

Preguntas
1) Voy a usar CentOS como sistema operativo
2) Se piensa disponer de un servidor con 4 GB de RAM es suficiente ? y si aumento la RAM debo usar 64 bits ?
3) Configuro apache como Prefork o Worker ?
4) Se debe realizar optimizacion a MySQL ?

Eso por ahora

Gracias

Alguna vez trabajé con moodle

Imagen de deathUser

Alguna vez trabajé con moodle haciendo unos cuantos módulos adicionales, y la verdad no es demasiado pesado, aunque esto dependerá de la cantidad de módulos que tenga instalados, así como de su integración con sistemas de terceros red5 para conferencias por ejemplo, con este antecedente ...

[quote=fa61an]Preguntas
1) Voy a usar CentOS como sistema operativo
2) Se piensa disponer de un servidor con 4 GB de RAM es suficiente ? y si aumento la RAM debo usar 64 bits ?
3) Configuro apache como Prefork o Worker ?
4) Se debe realizar optimizacion a MySQL ?[/quote]

1) Esa no me parece pregunta sino afirmación y me parece bien que uses una distro de tipo empresarial para un servidor de aplicaciones ...

2) La cantidad de recursos deberás medirla de acuerdo a la carga que esperes soportar, digamos tus 200 usuarios concurrentes querría decir que deberías poder gestionar 200 sesiones simultáneas con lo que el consumo de memoria lo puedes estimar con tu número de usuarios por la cantidad de memoria por sesión de usuario, es muy burda la aproximación pero te dará una idea, mira en la documentación de moodle sobre el dimensionamiento de hardware...
Se puede gestionar más de 4GB de RAM con 32 bits usando kernels especiales HUGEMEN o BIGMEN, pero si tienes un sistema de 64bits pues mejor usa una distro de 64 bits para aprovechar mejor el hardware ...

3) Ni idea, no he leído sobre el tema, aunque con lo que mencionabas sobre el soporte de Worker con PHP como módulo lo pensaría dos veces, aunque con fastcgi se pueden conseguir buenas prestaciones con php como CGI, nuevamente remitirse a la documentación ...

4) Pues es siempre buena idea la de monitorear la base de datos por consultas lentas y mirar si se pueden optimizar, cada parte del sistema es importante si de tunning de la aplicación en general se habla ...

bye
;)

Pocos modulos y servidor destinado al sitio web

Gracias "deathUser" por tu respuesta

El moodle que estoy utilizando realmente tiene los módulos por defecto mas 2 módulos mas instalados lo cual creo que la carga es la mínima.

Creo que a MySQL también se le puede optimizar un poco más. Pero no he encontrado una info guia que me permita seguir

En cuanto al funcionamiento de Apache con MPM Worker lo leí, de dos fuentes en otras fuentes no mencionaban que FASTCGI, lo cual no me quedó claro por eso la pregunta.

Que experiencia tienes con Nginx y si es bueno pensar es realizar ese cambio ?

Gracias

Para tunning de mysql tienes

Imagen de deathUser

Para tunning de mysql tienes bastante información, mira por ejemplo estos links ...

http://develooper.com/talks/
http://blog.ulf-wendel.de/?p=268
http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/
http://www.debianhelp.co.uk/mysqlperformance.htm
http://www.howtoforge.com/tuning-mysql-performance-with-mysqltuner
https://github.com/rackerhacker/MySQLTuner-perl

Lo de MaxClients de apache, deberías asegurarte de que puedas tener al menos los 200 clients simultáneos si es lo que te preocupa, en cuanto a ngnix no lo he usado, pero creo que EPE puso un como al respecto o era sobre una alternativa con mejor performance que apache para alta carga, en todo caso busca en los comos de CentOS debe estar ...

bye
;)

Páginas