Question

Je suis un peu novice pour le développement Web basé sur la pile JVM, mais futur projet nécessitera spécifiquement certains moteurs de WEB à base de machine virtuelle Java. Alors je commencé à chercher sur un terrain pour faire les choses rapidement et tourné pour essayer Grails. Les choses avaient l'air bien du livre, mais beeing impressionné par le temps très long démarrage (Grails run-app) j'ai décidé de tester comment fonctionne sous charge. Ici, il est:

  • test app: suivre quelques instructions ici pour faire de la terre (prend 2 minutes en supposant que vous avez déjà Grails et Tomcat installé):

    _http: //grails.org/Quick+Start

  • cas de test (avec référence Apache - est livré avec Apache httpd - _http: //httpd.apache.org):

    ab.exe -n 500 -c _http: // localhost: 8080 / my-projet / livre / créer
    (Note: ceci est juste 2 affiche les champs d'entrée dans le conteneur de style)

  • matériel: Intel i5 650 (* 4Core 3.2GHz) 8 Go de RAM et Windows Server 2003 x64

Le résultat est ..

Grails: 32 Req / s

Total transferred:      1380500 bytes
HTML transferred:       1297500 bytes
Requests per second:    32.45 [#/sec] (mean)
Time per request:       308.129 [ms] (mean)
Time per request:       30.813 [ms] (mean, across all concurrent requests)
Transfer rate:          87.51 [Kbytes/sec] received

(seulement 32 Req / Sec avec 100% de saturation du processeur, c'est une façon trop en dessous de mes attentes pour ce matériel)

... Ensuite - j'ai essayé de le comparer par exemple avec application JSF factice similaire (i a un ici: _http: //www.ibm.com/developerworks/library/j-jsf2/ - rechercher « code source avec les fichiers JAR », il y a \ jsf-example2 \ target \ jsf-example2-1.0.war à l'intérieur),

  • cas de test: ab.exe -n 500 -c 10 _http: // localhost: 8080 / JSF / backend / listing.jsp

Le résultat est ..

sur JSF: 400 Req / s

Total transferred:      5178234 bytes
HTML transferred:       5065734 bytes
Requests per second:    405.06 [#/sec] (mean)
Time per request:       24.688 [ms] (mean)
Time per request:       2.469 [ms] (mean, across all concurrent requests)
Transfer rate:          4096.65 [Kbytes/sec] received

... Et enfin va factice première JSP (juste pour la référence)

Jsp: 8000 req / s:

<html>
<body>
<% for( int i = 0; i < 100; i ++ ) { %>
Dummy Jsp <%= i %> </br>
<% } %>
</body>
</html> 

Résultat:

Total transferred:      12365000 bytes
HTML transferred:       11120000 bytes
Requests per second:    7999.90 [#/sec] (mean)
Time per request:       1.250 [ms] (mean)
Time per request:       0.125 [ms] (mean, across all concurrent requests)
Transfer rate:          19320.07 [Kbytes/sec] received  

...

Suis-je manque quelque chose? ... et l'application Grails peut fonctionner beaucoup mieux?

PS: J'ai essayé de profilage mon application Grails en cours d'exécution avec VisualVM, mais ai boucle sans fin de messages comme ...

Profiler Agent: Redefining 100 classes at idx 0, out of total 413
...
Profiler Agent: Redefining 100 classes at idx 0, out of total 769
...

Et enfin l'application juste cessé de fonctionner après quelques minutes -. Donc, ressemble profilage Grails est pas le choix pour un bon diagnostic

Mise à jour - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Tout d'abord, je dois admin, oui j'ai besoin de RTFM - à savoir « Grails run-app » est pas la bonne façon de fonctionner Grails pour la mesure du rendement. Après la compilation de WAR et le déploiement à la performance Tomcat est pas terriblement faible - il est juste faible. Les paramètres ci-dessous sont pour 1 utilisateur de la concurrence (je voulais juste vérifier ce qui est des performances MAX du cadre dans un thread et sans charge lourde) et en lisant d'autres postes connexes ici je suis venu à « http://stackoverflow.com/ Questions / 819684 / JSF et ressort-performance contre-pauvres jsp-performance » et a décidé de vérifier Apache Wicket citer -. sa performance est également inclus

Cas d'utilisation est le suivant: - ab.exe -n 500 -c 1 _http: // localhost: 8080 / ... - serveur est tomcat7 dans l'édition vFabric tcServer Dev avec 'insight' en cours d'exécution sur fond

----------------------   tcServer       Plain Tomcat 7    -c 10
/Grails/book/create      77 req/sec     130 req/sec       410 req/sec
/jsf/backend/listing.jsp 133 req/sec    194 req/sec       395 req/sec
/wicket/library/         870 req/sec    1400 req/sec      5300 req/sec

Alors ... de toute façon il y a quelque chose de mal avec Grails. J'ai fait quelques profilage à l'aide tcServer (merci Karthick) - on dirait qu'il est capable seulement de tracer des actions « à base de printemps » et stacktrace interne pour Grails est comme suit (pour 2 demandes - Note: les mesures ne sont pas stables - précision de pari i de tcServer loin de beeing parfait, mais peut être utilisé juste pour inforamtion)

Total (81ms)
    Filter: urlMapping (32ms)
        -> SimpleGrailsController#handleRequest (26ms)
        -> Render view "/book/create" (4ms)
    Render view "/layouts/main.gsp" (47ms)

Total (79ms)
    Filter: urlMapping (56ms) ->
        -> SimpleGrailsController#handleRequest (4ms)
        -> Render view "/book/create" (38ms)
    Render view "/layouts/main.gsp" (22ms)

PS:. Il peut arriver que la cause de la mauvaise performance dans Grails sont sous-jacente libs « Spring », va vérifier dans plus de détails

Était-ce utile?

La solution

Êtes-vous en cours d'exécution avec l'exécution app?

http://grails.org/Deployment indique:

« Grails ne doit jamais être déployé en utilisant les Grails d'exécution du serveur commande app comme ce jeux Grails en « développement » en mode qui a des frais généraux supplémentaires. »

Autres conseils

essayer de déployer votre application échantillon tomcat. grails run-app est uniquement pour le développement.

dans quel environnement avez-vous commencé l'application? prod? dev?

utilisez-vous échafaudage?

Je l'ai essayé sur ma machine (i7-2600K de base). une page de connexion avec 4 champs d'entrée, mises en page dynamiques et d'autres choses. J'ai 525 demandes par seconde dans l'environnement de développement plus lent.

Ouais c'est une référence par quelqu'un qui ne sait pas beaucoup sur Grails ou son environnement; d'abord, il est en cours d'exécution sur Windows pour être savent mal à la gestion des ressources qui est pourquoi la plupart web sert / app sert dans des environnements Linux fonctionne.

En second lieu, s'il utilise « ab » pour référence, alors il n'a pas sa configuration de cache proxy car après le premier coup, le reste des coups serait mis en mémoire cache et il est maintenant benchmarking son cache de ma compréhension de sa configuration.

Tout cela ressemble à l'analyse comparative d'une configuration mauvaise et une mauvaise compréhension de Grails. Aucune infraction prévue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top