2010-08-22 7 views
6

Estoy bastante impresionado por lo que Lift 2.0 trae a la mesa con Actores y StatefulSnippets, etc., pero estoy un poco preocupado por la sobrecarga de memoria de estas cosas. Mi pregunta es doble:¿Cómo se gestiona Scala's Lift?

  1. ¿Cómo determina el Ascensor cuándo recoger objetos de estado?
  2. ¿Cómo se ve la huella de memoria de una solicitud de página?

Si un rastreador web recorre la huella del sitio, ¿van a estar abriendo suficientes objetos de estado para ahogar un VPS modesto (512M)? La pregunta es obviamente dependiente de la aplicación, pero tengo curiosidad si alguien tiene figuras del mundo real que puedan arrojarme.

Respuesta

12

El elevador almacena la información de estado en una sesión, por lo que una vez que se destruye la sesión, el estado asociado con esa sesión desaparece.

Dentro de la sesión, Lift rastrea cada página para la que se asigna el estado (por ejemplo, asignación entre un botón ajax en el navegador y una función en el servidor) y tiene un latido del corazón del navegador. Las funciones para las páginas que no han visto el latido en 10 minutos no están referenciadas, por lo que la JVM puede recopilarlas. Todo esto es sintonizable, por lo que puede cambiar la frecuencia de latido del corazón, la vida útil de la función, etc., pero en la práctica los valores predeterminados funcionan bastante bien.

En términos de explosión de sesión, sí ... eso es un problema menor. Los sitios populares (incluido http://demo.liftweb.net/) lo experimentan. El código de ejemplo (vea http://github.com/lift/lift/tree/master/examples/example/) detecta las sesiones que fueron creadas por una sola solicitud y luego las abandona y caduca anticipadamente. Estoy ejecutando demo.liftweb.net con 256 MB de tamaño de almacenamiento dinámico (que cabría en un VPS de 512 MB) y, de vez en cuando, el recuento de sesiones aumenta más de 1.000, pero eso se aprieta rápidamente para el tráfico del motor de búsqueda.

+2

Respuesta del autor, me siento honrado. Gracias por los detalles y por un maravilloso proyecto! –

1

Creo que la pregunta sobre la huella de memoria alguna vez se respondió en algún lugar de la lista de correo, pero no puedo encontrarla en este momento.

La recolección de basura se realiza después de un tiempo de inactividad. Sin embargo, hay un example on the wiki que utiliza algunas heurísticas mejores para matar las sesiones generadas por los rastreadores web.

Por supuesto, para su propio proyecto, tiene sentido comprobar el consumo de memoria con algo así como VisualVM mientras genera un par de sesiones usted mismo.

+0

No había oído hablar de VisualVM, gracias! –

+1

No olvide VisualGC dentro de la herramienta jvmstat. –

Cuestiones relacionadas