Bonjour,
voilà je suis confronté un un pb incompréhensible. Et ça devient assez critique au boulot![]()
J'ai un traitement super long. J'ai donc essayé de l'optimiser pour la machine cible (Solaris 8, 4 procs, 4 Go de RAM). En gros, j'ai multithreadé le traitement (niveau donné et traitement) et je n'hésite pas à bouffer de la mémoire et du proc.
En gros :
- j'ai un programme principal, celui ci lance des threads producteurs dans un threadPoolExecutor (j'ai mis 4 thread pour la taille du Core).
- Ces producteurs écrivent des données dans une ConcurrentLinkedQueue static dans le prog principal qui contient les objets à traiter.
- Le prog principal lance les consommateurs de la meme manière que pour les prod.
- Les producteurs font des poll et traitent les objets lus. Ces objets lus possèdent des méthodes getXXX dont je me sers pour alimenter une hashmap qui cumule les valeurs si la clé existe.
Le problème est que pour environ 1-5 % des données, il y a des erreurs. Les valeurs que j'obtiens sont celles d'un autre objet (les données ne sont pas aléatoires).
Après test, les producteurs extraient les bonnes données et les mettent dans la ConcurrentLinkedQueue. Lorsque je lis cette liste avec les consommateurs, hop, certaines données sont erronées.
Plus fort, si je lance mon traitement depuis Eclipse, pas de pb aucune erreur dans les données.
J'ai essayé plusieurs options sur la ligne de commance java sur Solaris mais aucune ne change la donne.
Ce qui est assez "marrant" c'est que les données erronnées ne concerne pas toujours les mêmes objets mais certains reviennent assez souvent. Les données fausses proviennent quant à elles toujours d'un autre objet.
Avez vous une idée de l'origine du pb ?
la jvm ? (j'utilise la dernière version. Résultats identiques en 32 ou en 64 bits)
solaris ? (apparemment j'ai les deniers patch)
est ce que l'utilisation de références douces ou fantômes (ou un truc comme ça) pourrait me garantir mes résultats ?
d'avance merci à ceux qui liront tout et qui auraient peut être une idée![]()
Partager