/ / Comment l'ascenseur de Scala gère-t-il? - scala, lift, stateful, footprint

Comment l'ascenseur de Scala gère-t-il? - scala, lift, stateful, footprint

Je suis très impressionné par ce que Lift 2.0 apporte à la table avec Actors et StatefulSnippets, etc., mais je suis un peu inquiet au sujet de la surcharge de mémoire de ces choses. Ma question est double:

  1. Comment Lift détermine-t-il quand il faut ramasser les objets d'état?
  2. À quoi ressemble l'empreinte mémoire d'une demande de page?

Si un robot Web danse à travers l’empreinte devont-ils ouvrir assez d’objets d’état pour couvrir un modeste VPS (512M)? La question dépend très évidemment de l’application, mais je suis curieux de savoir si quelqu'un a des chiffres du monde réel à me livrer.

Réponses:

12 pour la réponse № 1

Lift stocke les informations d'état dans une session. Ainsi, une fois la session détruite, l'état associé à cette session disparaît.

Dans la session, Lift suit chaque page quistate est alloué pour (par exemple, le mappage entre un bouton ajax dans le navigateur et une fonction sur le serveur) et a un battement de coeur à partir du navigateur. Les fonctions pour les pages qui n'ont pas vu le battement de cœur depuis 10 minutes ne sont pas référencées afin que la machine virtuelle puisse les récupérer. Tout cela est réglable, vous pouvez donc modifier la fréquence cardiaque, la durée de vie des fonctions, etc., mais dans la pratique, les valeurs par défaut fonctionnent assez bien.

En termes d’explosion de session, oui… c’est un problème mineur. Les sites populaires (y compris http://demo.liftweb.net/ ) vis-Le. Le code exemple (voir http://github.com/lift/lift/tree/master/examples/example/ ) détecte les sessions créées par un seuldemande et ensuite abandonné et expire ceux au début. Je suis en train de lancer demo.liftweb.net avec 256 Mo de taille de segment de mémoire (ce qui correspond à un VPS de 512 Mo) et occasionnellement, le nombre de sessions dépasse 1 000, mais il est rapidement compressé pour le trafic des moteurs de recherche.


1 pour la réponse № 2

Je pense que la question sur l'empreinte mémoire a déjà été répondue quelque part sur la liste de diffusion, mais je ne la trouve pas pour le moment.

La collecte des ordures se fait après un certain temps d'inactivité. Il existe cependant un exemple sur le wiki qui utilise de meilleures heuristiques pour tuer les sessions générées par les robots d'indexation.

Bien sûr, pour votre propre projet, il est logique de vérifier la consommation de mémoire avec quelque chose comme VisualVM tout en générant vous-même quelques sessions.