Le réchauffement des applications Java à haut débit
-
20-09-2019 - |
Question
J'ai appris récemment sur les scénarios qui nécessitent une application réchauffant (avec exigence à haut débit) avant de commencer à servir les demandes réelles. La logique sous-jacente était de permettre JIT de faire sa magie de la performance!
Est-ce une norme pour les applications Java ou est-ce fait généralement pour la mémoire (lourds) empreinte des applications?
La solution
Si vous parlez d'un webapp / site à fort trafic alors JIT est un problème très mineur. Le plus gros problème est en train de chauffer (peuplement) toutes les couches de cache, vous aurez besoin d'avoir. Par exemple, les régions EHCache qui sont peuplées de mise en veille prolongée . En effet, les opérations liées IO sont des ordres de grandeur plus lent que tout ce qui se passe à l'intérieur du CPU (qui est à moins que vous calculez Fractales:)
Autres conseils
La question est, quand voudriez-vous sortir de votre chemin pour le faire?
Si vous lancez une webapp, et il est immédiatement vivre, alors pendant que vous êtes « réchauffement », vous ajoutez une charge supplémentaire, ce qui est contre-productif. Similaire est vrai quand une application de bureau commence. Aucun point de réchauffement si l'utilisateur va commencer à utiliser immédiatement. Ou pire, ne permettant pas l'utilisateur d'interagir pendant que vous réchauffant l'application.
Si vous lancez une webapp, et tester le déploiement avant de pointer votre équilibreurs de charge à elle, alors vous avez déjà échauffé comme conséquence de côté.
- Objets instanciation (chargement paresseux, singletons etc.);
- allocation de Heap (si votre
Xms
est plus petit que votreXmx
).
Je suppose que le système d'exploitation lui-même attunes au comportement d'une application aussi bien, de sorte que les appels OS peuvent également être affectées par une période d'échauffement.
La plupart de ce qui précède (la population du cache, l'initialisation de l'objet) ne sont pas spécifiques à Java.