OVH Cloud OVH Cloud

Etat de l'environnement Java

30 réponses
Avatar
Rahan
Bonjour,

J'ai une application Java qui tourne sur des machines Windows XP SP2. Cette
application utilise une version de java en dure située dans un sous
répertoire du répertoire de mon application.

Cette une application financière. Elle reçois énormément du flux (TCP et
UDP) liés aux marchés financiers (bourse).

Cette application Java permet donc d'afficher à l'écran en temps réel des
informations financière. Ok

Mon problème est que lorsque il y a énormément de flux, l'application
s'arrête d'afficher les informations financière qu'elle reçoit, pourtant la
certe réseau reçoit bien et je dirai même que les packet reçu sont en bon
états.

J'ai fait énormément de tests et j'ai conclu au boulot de mes analyses que
c'est cette application Java qui à un moment donné n'est plus capable de
gérer la quantité d'info qu'elle reçois et elle bloque.

Sur ce forum, j'aimerai avoir quelques conseils et orientations coté JAVA.

Par exemple, lorsque l'application Java bloque, est ce qu'il existe des
commandes utiles dans le répertoire /Bin de java qui me permet d'avoir des
info sur l'état général de mon appli ? Est ce qu'il existe des outils qui
permette de remonter des info sur l'état de mon appli Java ? Quelles sont
les choses que je peux vérifié au niveau de Java au moment ou ça bloque...
etc

Donc encore une fois, je souhaite avoir vos conseils et vos avis pour
débuguer un peu mon appli java (l'environnement Java) histoire d'avoir des
infos utile pour être certain à 100% que mon problème est au niveau de
l'appli Java et pas ailleurs (système, réseau, tcp... etc). Coté réseau,
suite à enormement de test, j'ai exclu toute possibilité d'un problème
réseau.

Je me concentre donc sur la partie JAVA VM.

Merci infiniment

Cordialement
Rahan

10 réponses

1 2 3
Avatar
Yves T
Qu'est ce que vous préconiser comme utilisation mémoire ?


750 Mo, c'est un max de toute façon, il reste 250 pour l'OS et quelques
conneries

Quel risque je pourrais avoir en changeant ce type de paramètre puisque je
ne suis pas sensé modifier ce type de paramètre... bon apres tout, je peux
toujours tester.


aucun

je suppose que je peux voir les threads dans le gstionnaire de tache de
windows mais de quel processus ? javaw.exe ?


Non

C'est qoi la concurrence ?


Oups je croyais que tu avais programmé toi même le programme.

- utilises tu Swing? si oui, le "freeze" est souvent inhérent aux
interfaces graphiques java (sdk 1.6 doit résoudre ça il me semble)


Quel est le lien entre la SDK 1.6 et JRE 5.0 Update 6 ?
Qu'est ce que SDK m'apporetai de plus que JRE ? désolé, je débute un peu
avec JAVA.


la fonction -server entre autre

- utilise un outil de profiling genre optimizeit pour voir au ça bloque


Non. Je vais installer ce produit et voir ce qu'il donne.


inutile si tu ne sais pas programmer en Java


Avatar
rahan
Yves T wrote:

Qu'est ce que vous préconiser comme utilisation mémoire ?



750 Mo, c'est un max de toute façon, il reste 250 pour l'OS et quelques
conneries


Quel risque je pourrais avoir en changeant ce type de paramètre puisque je
ne suis pas sensé modifier ce type de paramètre... bon apres tout, je peux
toujours tester.



aucun


je suppose que je peux voir les threads dans le gstionnaire de tache de
windows mais de quel processus ? javaw.exe ?



Non


C'est qoi la concurrence ?



Oups je croyais que tu avais programmé toi même le programme.


- utilises tu Swing? si oui, le "freeze" est souvent inhérent aux
interfaces graphiques java (sdk 1.6 doit résoudre ça il me semble)


Quel est le lien entre la SDK 1.6 et JRE 5.0 Update 6 ?
Qu'est ce que SDK m'apporetai de plus que JRE ? désolé, je débute un peu
avec JAVA.



la fonction -server entre autre


- utilise un outil de profiling genre optimizeit pour voir au ça bloque


Non. Je vais installer ce produit et voir ce qu'il donne.



inutile si tu ne sais pas programmer en Java




je vais commencer avec des paramètres memoire en 512 min et max pour
voir ce que ça donne.

j'ai vu sur le site de sun un outil qui permet de fournir des stat
JSTAT... etc je vais creuser un peu sur cette terre.

Merci beaucoup pour votre aide et orientation, je vais contunuer les
recherches et je reviens vers vous.

Merci encore et bon 15 aout.

Cordialement
Rahan



Avatar
Rahan
"Yves T" a écrit dans le message de
news:44e0b7da$0$29529$
dois-je lancer -server avec la commande java ? car j'ai une erreur :

C:Program FilesJavajre1.5.0_06bin>java -server
Error: no `server' JVM at `C:Program
FilesJavajre1.5.0_06binserverjvm.dll'


Etrange, chez moi (win XP), j'ai bien l'option :
-client to select the "client" VM
-server to select the "server" VM

Oupsss! je viens de trouver à cette URL :
http://blog.developpez.com/index.php?blogQ&p89&more=1&c=1&tb=1&pb=1
"Note : Sous Windows la JVM Server n'est disponible que dans le JDK."




Re-Bonjour à tous

A la fin de mon script de lancement de l'appli Java, j'ai les lignes
suivantes :

########################################################################
if /i "%1"=="/DEBUG" (


%JAVA_BIN% -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend n,addressD44 -showversion %JAVA_OPTS% -cp %CLASSPATH% %CLASSRUN%
%CLASSARGS%
) else (
start /B %JAVAW_BIN% -showversion %JAVA_OPTS% -cp %CLASSPATH% %CLASSRUN%
%CLASSARGS% >> %LOG_FILE% 2>&1
)
########################################################################

Je suppose donc qu'il est possible de lancer mon appli en mode DEBUG ?
Si oui, dans quelle variable dois-je ajouter l'option /DEBUG à mon script ?

Merci infiniment
Rahan


Avatar
Rahan
Yves,

Oui, l'appli utilise du swing !

Rahan
Avatar
Rahan
Bonjour,

Pour revenir à l'allocation mémoire avec xms et xmx, j'ai deux questions SVP
:

1. Est ce que la mémoire fixée dans les valeurs Xms et Xms sont les valeures
que l'environnement Java va allouer comme mémoire physique ou comme mémoire
virtuelle (total mémoire physique + mémoire du disque, soit le swap) ?

2. Dans le gestionnaire de tâche de windows le compteur "Erreur de page"
n'arrête pas de s'incrémenter pour le process Javaw.exe. Théoriquement, ce
compteur est incrémenté lors d'utilisation d'adresse mémoire non autorisée
du système. Ce compteur s'incrémente tout le temps, même lorsque mon appli
ne présente pas de problème. Qu'est ce que je dois conclure par rapport à
cet événement ?

Merci infiniment
Rahan
Avatar
Cyrille
Bonjour,

Pour revenir à l'allocation mémoire avec xms et xmx, j'ai deux questions SVP
:

1. Est ce que la mémoire fixée dans les valeurs Xms et Xms sont les valeures
que l'environnement Java va allouer comme mémoire physique ou comme mémoire
virtuelle (total mémoire physique + mémoire du disque, soit le swap) ?


Ce sont les valeurs maximales et minimales de mémoire que
l'environnement Java va allouer. Si elles sont physiques ou virtuelles,
c'est les affaires de ton Windows.

2. Dans le gestionnaire de tâche de windows le compteur "Erreur de page"
n'arrête pas de s'incrémenter pour le process Javaw.exe. Théoriquement, ce
compteur est incrémenté lors d'utilisation d'adresse mémoire non autorisée
du système. Ce compteur s'incrémente tout le temps, même lorsque mon appli
ne présente pas de problème. Qu'est ce que je dois conclure par rapport à
cet événement ?


Non, une "erreur de page", c'est quand le processus tente d'accéder à
une adresse mémoire non chargée physiquement, par exemple parce qu'elle
est sur le swap. Si ça s'incrémente très vite, tu peux en conclure que
tu manques de mémoire physique par rapport à ce que tu consommes,
processus Java + autres processus. Si l'incrémentation est lente, je ne
sais pas, quelques centaines par seconde, ça ne me parait pas scandaleux
pour un processus qui travaille.
Si Java tentait d'accéder à un emplacement mémoire non autorisé, Windows
ne se contenterait pas d'incrémenter un compteur, mais fermerait
autoritairement le programme.

--
C'est ma signature qu'elle est la mieux. Pas la vôtre.

Avatar
rahan
Cyrille wrote:

Bonjour,

Pour revenir à l'allocation mémoire avec xms et xmx, j'ai deux
questions SVP
:

1. Est ce que la mémoire fixée dans les valeurs Xms et Xms sont les
valeures
que l'environnement Java va allouer comme mémoire physique ou comme
mémoire
virtuelle (total mémoire physique + mémoire du disque, soit le swap) ?



Ce sont les valeurs maximales et minimales de mémoire que
l'environnement Java va allouer. Si elles sont physiques ou virtuelles,
c'est les affaires de ton Windows.

2. Dans le gestionnaire de tâche de windows le compteur "Erreur de page"
n'arrête pas de s'incrémenter pour le process Javaw.exe.
Théoriquement, ce
compteur est incrémenté lors d'utilisation d'adresse mémoire non
autorisée
du système. Ce compteur s'incrémente tout le temps, même lorsque mon
appli
ne présente pas de problème. Qu'est ce que je dois conclure par rapport à
cet événement ?



Non, une "erreur de page", c'est quand le processus tente d'accéder à
une adresse mémoire non chargée physiquement, par exemple parce qu'elle
est sur le swap. Si ça s'incrémente très vite, tu peux en conclure que
tu manques de mémoire physique par rapport à ce que tu consommes,
processus Java + autres processus. Si l'incrémentation est lente, je ne
sais pas, quelques centaines par seconde, ça ne me parait pas scandaleux
pour un processus qui travaille.
Si Java tentait d'accéder à un emplacement mémoire non autorisé, Windows
ne se contenterait pas d'incrémenter un compteur, mais fermerait
autoritairement le programme.



Merci Cyrille pour vos réponses préciseuses.

Bonne soirée

Rahan


Avatar
rahan
Yves T wrote:

J'ai vérifier le script de lancement de l'appli, la ligne suivante est
présente :
-Xms64M ou -Xmx256M



256 peut être un peu léger si la machine est puissante.

D'une manière général :
- regarder si les threads et la concurrence sont correctement gérés
- utilises tu Swing? si oui, le "freeze" est souvent inhérent aux interfaces
graphiques java (sdk 1.6 doit résoudre ça il me semble)
- utilise un outil de profiling genre optimizeit pour voir au ça bloque
- gestion de ta mémoire correcte? le GC c'est bien beau mais ça résout pas
tout

AMHA, cherche du coté des threads bloquants.




Pour la partie Swing, admetons que mon freeze est dû à un bug JRE.

Sachant que mon appli fait appel en dure à JRE 1.5_03, je suppose donc
qu'il n'est pas possible ou surtout pas recommandé de lancer mon appli
Java avec SDK ou JRE 1.5_06 ou encore 1.6 ?

Merci infiniment

Rahan


Avatar
rahan
Yves T wrote:


Quel est le lien entre la SDK 1.6 et JRE 5.0 Update 6 ?
Qu'est ce que SDK m'apporetai de plus que JRE ? désolé, je débute un peu
avec JAVA.



la fonction -server entre autre


Sachant que mon appli fait appel en dure à JRE 1.5_03 installé dans un
sous repertoire de mon appli, est ce qu'il est possible de lancer mon
environnement Java en mode server (-server) ?

Je suppose que non puisque pour avoir l'option -server sous windows il
faut utiliser SDK alors que mon appli fait appel à JRE.

Pourriez-vous confirmer SVP ?

Merci infiniment

Cordialement
Rahan


Avatar
rahan
Cyrille wrote:

Bonjour,

Pour revenir à l'allocation mémoire avec xms et xmx, j'ai deux
questions SVP
:

1. Est ce que la mémoire fixée dans les valeurs Xms et Xms sont les
valeures
que l'environnement Java va allouer comme mémoire physique ou comme
mémoire
virtuelle (total mémoire physique + mémoire du disque, soit le swap) ?



Ce sont les valeurs maximales et minimales de mémoire que
l'environnement Java va allouer. Si elles sont physiques ou virtuelles,
c'est les affaires de ton Windows.

2. Dans le gestionnaire de tâche de windows le compteur "Erreur de page"
n'arrête pas de s'incrémenter pour le process Javaw.exe.
Théoriquement, ce
compteur est incrémenté lors d'utilisation d'adresse mémoire non
autorisée
du système. Ce compteur s'incrémente tout le temps, même lorsque mon
appli
ne présente pas de problème. Qu'est ce que je dois conclure par rapport à
cet événement ?



Non, une "erreur de page", c'est quand le processus tente d'accéder à
une adresse mémoire non chargée physiquement, par exemple parce qu'elle
est sur le swap. Si ça s'incrémente très vite, tu peux en conclure que
tu manques de mémoire physique par rapport à ce que tu consommes,
processus Java + autres processus. Si l'incrémentation est lente, je ne
sais pas, quelques centaines par seconde, ça ne me parait pas scandaleux
pour un processus qui travaille.
Si Java tentait d'accéder à un emplacement mémoire non autorisé, Windows
ne se contenterait pas d'incrémenter un compteur, mais fermerait
autoritairement le programme.



Bonjour,

QUESTION MEMOIRE :
================= Pour essayer de voir si mon appli genere un message d'erreur lorsque il
manque de mémoire libre, j'ai paramétré xms et xmx à 16 et à 32 Mo de
mémoire pour voir ce qui se passe.

Ainsi, lorsque ça ram, l'appli ecrit une entrée de type OutOfMemoryError
dans le fichiers log ! L'appli ne cache pas donc ce type d'erreur.

J'ai remis xms et xmx à 64 Mo et à 256 Mo, valeur par défaut de l'appli.

Lorsque mon appli bloque, je n'ai pas de message de type
OutOfMemoryError, je pense que je peux conclure donc que mon problème
n'est pas un problème d'utilisation mémoire.

Pourriez-vous SVP donner votre avis sur ce point ?


QUESTION CPU :
============= La commande d'execution de l'environnement Java de mon appli passe en
paramètre le nombre de processeur de la machine. Je pense que la machine
VM Java doit avoir un comportement différent avec une machine equipée
d'un seul processeur ou bi-processeur.

Ma machine est une machine qui fait du HT. Mon appli vois donc la
machine comme etant une machine à bi-processeur.

Est ce que vous penser que les projets de développement avec Java
peuvent poser quelques problemes avec des machine à bi-coeur ?

Merci infiniment

Cordialement
Rahan


1 2 3