2010-04-03 5 views
3

J'ai remarqué que mon application est parfois très lente, j'ai donc fait quelques tests. C'est une application web très simple. Une servlet obtient des paramètres que les stocke. Tout va bien, sauf une chose. Cela prend trop de temps pour obtenir un paramètre pour la première fois. Peu importe le paramètre que j'essaie d'obtenir, mais pour la première fois c'est très lent. La chose étrange est que cela n'arrive pas toujours. Parfois, obtenir un paramètre pour la première fois n'est pas lent.Demande de servlet getparameter

Mon code ressemble à ceci

request.getParameter("paramName"); 
request.getParameter("paramName2"); 
request.getParameter("paramName3"); 

Obtenir "paramName" est lent. Obtenir les autres est très rapide.

Par lente Je veux dire: 200-800 milliseconde En très rapide, je veux dire: ~ 0 milliseconde (dans l'extrait de code, je ne pas écrire le test de performance, mais je suis en utilisant System.currentTimeMillis())

UPDATE

J'ai exporté mon projet dans un fichier .WAR et l'ai déployé sur Tomcat. Tout va bien. Donc, je pense que ce problème est lié à Eclipse ou quelque chose.

Répondre

2

Je suppose que les paramètres peuvent être analysés paresseusement - lorsque vous demandez un paramètre pour la première fois, il peut tout analyser, en les stockant pour un accès efficace plus tard.

Cependant, 200ms sonne comme un temps terriblement long ... est-ce lorsque vous utilisez un débogueur?

Bien sûr, cela dépend entièrement de votre conteneur de servlet.

+0

Non, je ne débogue pas. J'utilise Tomcat 6 avec Eclipse. Il suffit d'appuyer sur "run on server" et c'est tout. C'est très étrange, et je ne comprends pas. 200ms sonne terriblement long, mais habituellement il est 600 ou même 800 – Bob

+1

@Bob: Si cela ne se produit que pour la première requête, il peut être JIT compiler beaucoup de code. Si cela arrive pour * chaque * demande, je pense qu'il y a un problème avec vos mesures de performance - ou que vous utilisez un 486 :) Sérieusement, si Tomcat prenait 600ms (ou même 200ms) pour analyser les paramètres de requête, il serait inutilisable pour tout déploiement sérieux. –

+0

Je l'ai observé aussi avec Jetty, en fait je vois que beaucoup des premières exécutions de méthodes sont très lentes (par rapport à l'invocation suivante), est-ce que je peux confirmer que c'est à cause de la compilation JIT? – Sudarshan

0

Avez-vous assez de mémoire? Vous avez besoin de beaucoup lorsque vous travaillez avec Eclipse et un serveur de déploiement, et cela ressemble à un échange.

+0

J'ai 4 Go dans mon ordinateur, et j'ai paramétré la VM comme ça : -Xms1024M -Xmx1024M. – Bob

1

Semble comme un bogue dans le navigateur web intégré d'Eclipse qu'il n'envoie pas l'en-tête Content-Length correctement. Je ne peux pas dire d'expérience car je ne l'ai jamais utilisé sérieusement. Je déploie toujours le projet sur Tomcat ou Glassfish intégré, le démarre et ouvre simplement la page dans un navigateur Web réel (Firefox, Chrome, Safari, IE, etc, que vous exécutez indépendamment d'Eclipse). Cela a l'avantage majeur que vous pouvez utiliser les plugins et les addons du navigateur qui peuvent grandement faciliter le développement tels que Firebug et consorts.

Si vous insistez à utiliser le navigateur Web dans Eclipse, essayez de changer le navigateur Web utilisé en allant Fenêtre> Navigateur Web et le choix autre que navigateur Web interne.

Questions connexes