2012-01-24 6 views
1

J'ai plus de 20M de données dans MongoDB et en utilisant le pilote java, j'essaie d'obtenir des données et un graphique en utilisant JFreeChart. J'ai classe principale simple qui lit des données de MongoDb, crée l'ensemble de données et parcelle de diagrammes. Quand j'exécute le programme dans le PC (3GB Ram, processeur i5) il exécute très lentement. Dans 10 heures il effectue seulement 200K data.Then J'essaie d'exécuter le code dans le serveur IBM avec 24 Go de RAM, mais les performances sont les mêmes.Comment améliorer les performances d'un projet Java?

Ceci est la commande que je lance:

java -cp my-program.jar: external1.jar: external2: pot Graphique

devrait-il pas être rapide sur le serveur? Comment pourrais-je améliorer la performance?

+4

Avez-vous essayé de donner à Java une partie de cette mémoire? Les options '-Xmx' et' -Xms' valent le coup d'oeil. – Borealid

+1

Y at-il des mathématiques de fantaisie impliqués? Je suis en train de tracer 200 000 points de données en quelques secondes ... – Frankie

+0

Avez-vous déterminé d'où vient la mauvaise performance? Si vous vous contentez d'interroger les données et de les jeter pour isoler les performances de récupération des données, cela prend-il encore autant de temps? –

Répondre

1

J'ai résolu le problème.Il n'est pas lié à Java, le problème est causé par Jfreechart.

Je trier des données sur MongoDB et ajouter des données au XYSeries afin de créer un ensemble de données. XYSeries possède un champ autoSort dans le constructeur et, par défaut, il est vrai. Cela signifie que lorsque vous ajoutez un nouvel élément à l'ensemble de données, il vérifie si les éléments de la série sont triés ou non. En le définissant faux améliore les performances.

XYSeries series = new XYSeries("followersCount",false); 

Deuxièmement, je setted notify false dans le add method. S'il n'est pas défini comme faux, il envoie une notification à tous les écouteurs enregistrés, ce qui réduit les performances.

series.add(1,2000,false); 
0

Il semble que vous soyez à l'étape du déploiement. Donc, si vous avez une application web qui fonctionnera sur un serveur, vous ne devriez pas simplement lancer l'application. (.jar) Une archive Web Applcation (.war) doit être créée et installée dans votre conteneur (Tomcat, Glassfish, Weblogic, etc.). Après cela, si vous avez encore des problèmes de performances, cela indique un problème concernant votre code/logique.

Questions connexes