2011-12-19 8 views
5

Estoy escribiendo un servlet de Java que planeo implementar en Amazon AWS utilizando Elastic Beanstalk. Mis pruebas muestran que las cosas funcionan bien con una instancia de Small EC2 utilizando su stock AMI de Tomcat que utiliza Beanstalk.Asignación de un montón de Java para Tomcat en una instancia de EC2

Estoy intentando averiguar cómo asignar correctamente el espacio de montón de Java para esta configuración. Una instancia pequeña tiene 1.7 GB de memoria, por lo que estoy pensando que un montón de 1024MB funcionará bien. Me doy cuenta de que la memoria será necesaria para otras cosas, aunque el único propósito "real" de esta instancia es ejecutar Tomcat. Y también sé que hay algún punto con montones grandes donde la JVM Sun/Oracle estándar realmente no funciona.

¿Es esta una forma razonable de asignar la memoria? ¿Debo usar más o menos? ¿Qué herramientas puedo usar para ayudar a determinar la configuración óptima?

Respuesta

2

1024 parece estar bien, tal vez un poco demasiado.

No estoy exactamente seguro de lo que está haciendo tu servlet, pero para que te hagas una idea, tengo una aplicación de comercio electrónico con aproximadamente 1000 usuarios diarios que se ejecutan en 2 pequeñas instancias ec2. La carga de Tomcat se distribuye a través de mod_jk.

No sintonicé la JVM y mantuve la configuración predeterminada. También estoy usando caché de objetos distribuidos de terracota, y ese proceso parece consumir la mayor parte de la memoria.

¿Está implementado en un sistema operativo o ventanas basado en Linux? IMO, linux hace un mejor trabajo al administrar la memoria disponible.

En cuanto a las herramientas, sugiero que implemente su aplicación en una pequeña instancia de ec2 y que use una herramienta como JMeter para poner a prueba la aplicación. Durante la prueba de estrés, puede hacer que la utilidad superior se abra (suponiendo que su aplicación esté en Linux y esté instalada la parte superior).

Trate de romper su aplicación al ver la cantidad de carga que puede manejar. Esa es la belleza de ec2, puedes configurar un entorno de prueba en minutos y descartarlo inmediatamente después.

+0

Gracias por su aportación. No entraré en detalles sobre nuestra aplicación. Permite a los usuarios ver información sobre diferentes temas y luego posiblemente agregarles más información. Parte de la información sobre los temas se genera dinámicamente desde una base de datos, mientras que la mayoría son datos estáticos que leemos desde los archivos al inicio y se guardan en nuestras propias estructuras de datos en el montón. En conjunto, tiene alrededor de 250-300 MB de datos. Supongo que cuando realmente funcione, tendremos unas pocas decenas de miles de usuarios por día. –

+0

En mi proyecto anterior de AWS intenté controlar todo. Para este proyecto, decidí que necesitaba dedicar más tiempo a la aplicación "real" y a cómo comercializarla, y no a simples trabajos de TI, así que simplemente estoy usando stock Beanstalk. Eso significa usar su stock AMI, que es Linux, y Elastic Load Balancer. ¿Hay alguna razón por la que está utilizando mod_jk para distribuir carga en lugar de ELB? Por lo tanto, ¿por qué crees que 1024 es demasiado? Eso deja 700MB para todo lo demás, que en realidad no es más que tareas estándar del sistema operativo. ¿Estoy mirando esto correctamente? –

+0

@SanderSmith Todavía estoy usando el ELB, pero lo estoy usando para equilibrar entre 2 pequeñas instancias del servidor web de apache. Luego mod_jk se usa desde mis instancias de servidor web de apache para distribuir la carga a mis instancias de tomcat. Apache es mejor en el servicio de recursos estáticos y maneja mejor SSL, por eso los estoy usando. Supongo que lo mejor que puedes hacer es probar la carga y tomar tus decisiones desde allí. Si su aplicación espera recibir 10k usuarios por día, no creo que una pequeña instancia de ec2 sea suficiente sin importar cómo ajuste la JVM –

0

Compruebe newrelic para java para determinar su patrón de uso del montón.

Cuestiones relacionadas