Bonjour tout le monde,
J'ai déjà posté mon problème sur msdn, mais j'ai pensé que je pourrais peut être obtenir de l'aide ici.
Je développe un service .NET 4.0 pour consommer les messages de plusieurs queues distantes MSMQ, cela en transactionnel et en asynchrone. Donc pour cela j'utilise la méthode BeginPeek sur chacune des queues, puis dans la callback j'utilise la méthode Receive dans un TransactionScope qui utilise implicitement MSDTC pour la transaction.
Le problème vient du service Microsoft gérant MSMQ, mqsvc.exe, s'executant sur la machine (win7 ou 2k8r2 sp1) où mon service de consommation s'execute (cette machine ne fait que ça, ni queue ni message ne sont créé dans le MSMQ de cette machine). mqsvc.exe s'alloue de plus en plus de mémoire, lentement, mais sans jamais la libérer, jusqu'à atteindre le maximum de 2Go qu'il peut s'allouer et fini donc par planter totalement. Le seul moyen de libérer cette mémoire est de redémarrer le service.
Toutes les clés de registre concernant les intervalles de vidage du cache pour MSMQ ont des valeurs qui tournent autour de la minute.
J'ai essayé plusieurs choses histoire d'identifier la source de ce problème :
-utiliser MSDTC en local ou en distant, dans le cas du distant, j'utilise évidemment la machine où les messages sont stockés comme machine distante.
-utiliser la librairie COM mqoa.dll à la place de .NET pour l'utilisation de MSMQ, pour pouvoir utiliser explicitement MSDTC avec MSMQ.
-tester cela sur différentes machines (que des win7 ou 2k8r2 sp1)
Mon service s’exécute sans aucune exception et tout ce qui peut être dispose ou close, l'est dès que possible.
Dans tous les cas essayés, ce problème est toujours présent (et j'ai que ce soucis là à chaque fois).
Quelqu'un a une idée pour résoudre ce problème ?
Merci d'avance !
Partager