La Technique ou de l'utilitaire pour minimiser Java “warm-up” de temps?

Je suis supportant Java application de messagerie requiert une latence faible (< 300 microsecondes traitement de chaque message). Cependant, notre profilage montre que le Soleil de la Machine Virtuelle Java s'exécute lentement au début, et accélère après la première 5000 messages ou plus. Les 5 000 premiers messages ont des temps de latence de 1 à 4 millisecondes. Après environ 5000 premiers, les messages suivants ont ~250 microsecondes de latence, avec parfois des valeurs aberrantes.

Il est généralement entendu que c'est un comportement typique d'une application Java. Cependant, à partir d'un point de vue commercial, il n'est pas acceptable de dire au client qu'ils doivent attendre pour la JVM de "réchauffer" avant de voir la performance de ils exigent. La demande doit être "chaud" avant le premier client message est traité

La JVM de Sun 1.6.0 mise à jour 4.

Des idées pour résoudre ce problème:

  1. JVM paramètres, tels que:- XX:CompileThreshold=
  2. Ajouter un composant de "réchauffer" l'application au démarrage, par exemple par l'envoi de faux messages" par le biais de l'application.
  3. Charge statique de l'application et les classes du JDK lors du démarrage de l'application, de sorte que les classes ne sont pas chargés de Pots lors du traitement des messages client.
  4. Une certaine utilité ou Java agent qui accomplit une ou l'autre de ces deux idées, de sorte que je n'ai pas ré-inventer la roue.

REMARQUE: Évidemment, pour cette solution, je suis à la recherche de tous les facteurs, y compris la puce arc, type de disque et de la configuration et des paramètres du système d'exploitation. Cependant, pour cette question, je veux me concentrer sur ce qui peut être fait pour optimiser l'application Java et de minimiser les temps "d'échauffement".

  • Je pense que vous feriez mieux de regarder la cause sous-jacente de ce délai initial. Des outils de profilage pourrait aider.
  • Envoyer 5000 faux messages sur le serveur en tant que partie de l'installation et de la procédure de démarrage.
  • 5000 faux messages (même si c'était une bonne idée) sonne comme il serait ajouter 5 à 20 secondes pour le temps de démarrage de l'application.
  • J'aime l'idée de 3, si c'est ce qui est vraiment la cause de la latence.
  • Pouvez-vous expliquer les caractéristiques de cette applicatioon? - est-il prévu que l'application de processus de plus de ~5000 messages à chaque fois qu'il démarre? Ou ne l'app besoin pour démarrer et arrêter souvent?
  • Avez-vous essayé avec une autre JVM à la JRE de Sun? J'ai vu 20 à 30% de la vitesse-ups avec un plus rapide temps de préchauffage à l'aide de BEA JRockit sur les machines Windows.
  • Aussi, pouvez-vous dresser une liste de toutes les options de la JVM vous utilisez aujourd'hui? J'aime l'idée d'un l'aide d'un Profileur, mais je soupçonne que les résultats qu'il donne peut vous aider à optimiser les caractéristiques de performance du code que vous écrivez, mais pas tellement pour optimiser les effets de point d'accès ou de potentiel de classloading warm-up.
  • Pour ceux qui éprouvent ce post via les moteurs de recherche, l'application de warm-up est répertorié comme une technique dans le très bon livre blanc sur la haute performance Java: cinnober.com/news/benefits-using-java-highperformance-language
  • Précédent URL 404. Nouvelle URL : cinnober.com/white-papers/...

InformationsquelleAutor noahlz | 2009-09-26