|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Bonjour,
J'ai une interface qui tourne sur un serveur de prod dont les indicateurs (top sous Unix à 2.0 max) sont bons et pourtant j'ai des perfs lamentables autour de 10h de traitement. Cette même interface met 3h30 à 4h sous windows sachant que je l'ai developpée sous et compilé sous Windows/Eclipse. |
|
|
00
|
|
|
#2 |
|
Inactif
Alexandre Jaquet Inscription : mai 2006 Messages : 2 199 ![]() |
Etonnant,
Quel type de traitement ton programme fait ? Quels programmes utilisent-t-il ? |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : janvier 2006 Messages : 2 345 ![]() |
Quelles librairies natives sont utilisées ?
Car peut-être que tu utilises des librairies nulles en Unix et quelles sont bonnes en Windows. Il faut plus d'infos détaillées pour qu'on puisse répondre à ce genre de question.
__________________
Ma page dvp.com
|
|
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Au fait, j'ai passé hier à potasser la doc GC.
Le problème ne vient pas de l'OS mais du serveur sur lequel , je fais tourner l'interface (qui fait du traitement via une API d'un progiciel). En effet sur le serveur de Prod: (Unix) Full GC dure de 5 à 6 sec Sur le Serveur de Dev (Unix) Full GC dure de 1 à 2 sec Etant donné que l'interface est pas super bien codé notamment avec des appels explicité à system.gc() toutes les iterations , je vous laisse imaginer la degradation de perf... Je suis en train de tenter : -XX:+DisableExplicitGC Pour desactiver les appels à system.gc()... Si vous avez des idees... (la memoire free est de 1800 Mo sur les 2 serveurs et 9G de free Swap) Le Top donne un bon load average qui depasse pas les 2 J'attend vos conseils d'optimisation Voila |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() Inscription : janvier 2006 Messages : 2 345 ![]() |
Citation:
__________________
Ma page dvp.com
|
|
|
|
00
|
|
|
#6 | |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Citation:
Je plaide innoncent... je ne l'ai pas fait Moi je tente d'optimiser... |
|
|
|
00
|
|
|
#7 | |
|
Expert Confirmé
![]() Inscription : janvier 2006 Messages : 2 345 ![]() |
Citation:
Accessoirement surveille la consommation mémoire de ton applic pendant le test (si tu utilises java5 ou plus tu as jconsole qui est bien pratique ma foi). Après on ne peut pas vraiment te dire comment optimiser... faut plus de détails. On n'est pas magiciens.
__________________
Ma page dvp.com
|
|
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Bon bonne nouvelle , je passe d'un temps traitement de 10h à 2h waw!!
Sans les Full GC c'est genial...par contre mon me tanne pour savoir pourquoi les Full GC sont aussi long sur notre serveur de prod... d'ou ca peut venir? (On est en "1.4.2_06" alors qu'en dev , on est en 1.5_11 mais bon ca n'explique pas pour moi) |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : août 2004 Messages : 8 227 ![]() |
Euh vu les diffs de perfs entre la 1.4 et la 1.5 c'est compréhensible (d'ailleurs c'est pas forcément une bonne idée de travailler avec des versions diffférentes entre les environnements de prod et de dev).
Et le GC est une bestiole qui peut te bouffer un bon paquet de mêmoire les temps de vérifier toutes les références. D'autant plus que tu ne gères pas réellement le moment ou il intervient. Mieux vaut ne pas trop l'emmerder et le laisser faire tranquillement son boulot dans son coin
__________________
Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something. |
|
|
00
|
|
|
#10 | |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Citation:
Tu crois vraiment que sun a reussi à gagner autant au niveau des system.gc() (full gc)? C'est aussi revolutionnaire que ca la 1.5? |
|
|
|
00
|
|
|
#11 | |||||||||
![]() ![]() Développeur Java/Web Inscription : avril 2002 Messages : 12 460 ![]() |
Salut,
Citation:
En appelant explicitement System.gc() on le force à faire le ménage... ce qui peut être pénalisant ! Un exemple : la création de 50000 objets dans un boucle : Code :
Code :
Maintenant si je force le passage du GC à chaque itération : Code :
Code :
Tout cela pour libérer un seul objet ! Le problème est que les "Full GC" sont bien plus couteux, et qu'ils sont appelés inutilement... Bref : System.gc() est vraiment à utiliser dans des cas très rare, et surtout pas dans une boucle !!! Quand à la différence entre le serveur de dev et de prod, cela vient surement du fait que le System.gc() n'est pas forcément exécuté. Ce n'est qu'une suggestion et la JVM peut l'ignoré (Utilise -verboce:gc pour vérifier cela -- attention car ceci peut être couteux car cela génère de gros logs). a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java |
|||||||||
|
00
|
|
|
#12 | |||||||||
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Citation:
Merci c'est tres instructif. Et sinon la jvm 1.5 est elle à ce point plus performante que la 1.4 pour le Full GC? |
|||||||||
|
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Au fait j'utilise verbose , sinon je pourrai vous dire les temps des FGC
Apparement la jvm 1.5 gere bien mieux les major collection. |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() |
La JVM 1.5 a apporté pas mal d'améliorations au GC, elle en vaut largement la peine. Il est également intéressant de bien comprendre comment le GC fait son travail et surtout quels algorithmes de GC sont disponibles et comment les paramétrer. Cela va bien plus loin que le choix entre la JVM server et client (qui interviennent plus sur le JIT en fait). En outre, le paramétrage du GC doit vraiment se faire au cas par cas. Cela dépend donc vraiment de ton application (crée-t'elle beaucoup d'objets temporaires ? beaucoup d'objets avec une longue durée de vie ? etc.) et du hardware (un ou plusieurs CPU ? combien de RAM ? etc.).
Si tu tournes avec J2SE 1.5, essaye très vite l'outil jconsole qui te permet d'observer le comportement du GC. Sinon, tu peux faire comme dans mon article et écrire des scripts pour analyser les traces du GC et créer des graphes sous OpenOffice.org/Excel pour voir un peu mieux ce qu'il se passe. Une chose est sûre, il *faut* supprimer tous ces appels à System.gc(). Souviens-toi que le GC interrompt l'exécution de l'application. Je te conseille également d'utiliser un bon profiler (cf celui de NetBeans ou jconsole) pour vérifier que vous ne leakez pas de la mémoire dans le tenured space. Cela pourrait expliquer la lenteur des major collections. Des appels à gc() n'arrangeront en rien les choses, ou seulement temporairement. |
|
|
00
|
|
|
#15 |
|
Futur Membre du Club
![]() Inscription : septembre 2005 Messages : 190 ![]() |
Merci GFX.
J'ai récupéré les temps totaux squattés par le GC est finalement je passe de 16 min à 1min42 apres avoir tweaker à mon amximum la Jvm. Le temps d'execution est tres long (tres gros objets à exporter)...je vais essayer de tweaker hibernate ou au mieux améliorer l'algo. Merci à Tous. Un post plus qu'instructif |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com