2009-10-19 5 views
3

J'utilise une bibliothèque .Net open source qui utilise MSMQ en dessous. Après environ une semaine ou 2, le service ralentit (pas exactement chronométré mais devinez général). Il semble que ce qui se passe est que les messages de MSMQ ne sont lus qu'une fois toutes les 10 secondes. Normalement, ils sont lus instantanément. Ainsi, ils seront lus à T + 10sec, T + 20sec, T + 30sec, etc., indépendamment du moment où le message a été envoyé (c'est-à-dire qu'il faut parfois 3 secondes pour lire le message, 9 secondes en plus).Lecture lente de file d'attente MSMQ

La façon actuelle je le récupérer à la normale est la simple suppression de & recréer les files d'attente. Donc, la question est, ce qui peut construire dans les files d'attente MSMQ pour provoquer ce genre de ralentissement? Il n'y a aucun message dans les files d'attente lorsque le ralentissement se produit. Existe-t-il des outils d'analyse MSMQ avancés qui vous donnent un aperçu plus approfondi des files d'attente (par opposition à la gestion de l'ordinateur)? Oh, j'ai oublié de mentionner, écrire les messages dans la file d'attente semble toujours être instantané. C'est juste en lisant les messages qui montre ce comportement.

EDIT: La question de suivi @here est un peu plus détaillée et plus ciblée.

+0

Sur quelle taille de mémoire le processus MSMQ est-il limité? –

+0

Je ne suis pas sûr de ce que vous voulez dire? Où puis-je vérifier les limites de mémoire de MSMQ? – mike

+0

Etes-vous sûr que le problème est dans MSMQ et non dans la bibliothèque open source que vous utilisez? Avez-vous dépassé le code qui est en train de lire à partir de MSMQ et confirmé que c'est là que se situe le retard? – DSO

Répondre

2

Cela fait un moment que j'ai fait des trucs MSMQ alors supportez-moi (soyez tolérant) de ma vieille mémoire du cerveau. Certaines questions viennent à l'esprit:

La file d'attente du journal est-elle active? Ceci est lié à une file d'attente et si la file d'attente est supprimée, je crois (ne pas me citer) que la revue commence alors de vide ...

est-il un processus de purge sur la file d'attente? S'agit-il de files d'attente transactionnelles?

Tous les Service Packs actuels sont-ils appliqués? J'ai l'impression de me souvenir d'un correctif sur un service pack pour cela dans un passé lointain. Il dépend probablement de la plateforme, mais vous n'indiquez pas votre plateforme. Je crois qu'il y avait plusieurs service packs de cette nature.

À quoi ressemble votre espace disque? Êtes-vous confronté à un problème d'espace disque ou à un problème de disque fragmenté? Les fichiers (si je me souviens bien) sont stockés sous windows \ system32 \ msmq. S'il n'y a pas assez de blocs de la taille requise, cela peut ralentir - généralement lors de la mémorisation/réception du message, pas sûr des lectures.

Ces files d'attente publiques ou privées sont-elles? Qu'est-ce que le moniteur de performances dit sur le pool paginé, etc.? Je crois que c'est 70-80 octets par message.

EDIT 1:

des archives de documents MSDN:. « files d'attente privées sont enregistrées sur l'ordinateur local, pas dans le service d'annuaire et leurs propriétés ne peuvent pas être obtenues par des applications Message Queuing en cours d'exécution sur des ordinateurs distants message La mise en file d'attente enregistre les files d'attente privées localement en stockant une description de chaque file d'attente dans un fichier distinct du dossier LQS (local queue storage) sur l'ordinateur local. " Par conséquent, si le service d'annuaire est arrêté, les files d'attente publiques ne sont pas disponibles. D'autre part, les files d'attente privées sont stockées dans le système de fichiers local.

Cette machine doit avoir beaucoup de mémoire pour éviter l'échange de la file d'attente.Je n'ai jamais essayé d'exécuter MSMQ sur une boîte de Windows XP franchement en raison de la question des performances - j'ai toujours eu l'exécution sur une boîte de serveur dédié avec beaucoup de mémoire - mais ensuite, nous travaillions avec un grand nombre d'éléments en file d'attente, de grande taille chacun. (Plusieurs milliers, près de la limite de la taille de chaque)

EDIT 2: Système de fichiers et les fichiers vides:

« fichiers de messages vides sont supprimés une fois toutes les six heures, par défaut Cet intervalle de temps peut être contrôlé dans le. Registre en définissant la valeur MessageCleanupInterval REG_DWORD sous HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSMQ \ Parameters Les applications ne doivent pas garder les curseurs ouverts inutilement pendant longtemps Les curseurs peuvent pointer vers des messages qui ont déjà été reçus (et supprimés des fichiers). et la suppression des fichiers vides

REMARQUE: Vous devez disposer d'une quantité importante d'espace libre sur le disque sur lequel s'exécute problèmes de fragmentation. Vous POUVEZ ESSAYER de réduire ce délai de 6 heures pour voir si cela aide - donc il n'a pas à garder la trace des fichiers vides. Essayez de vous assurer qu'il n'y a pas d'autre activité sur la machine qui pourrait fragmenter le disque - comme la navigation sur Internet.

Dans une file d'attente publique, il est parfois étendu pour éviter les frais d'interaction, ce qui peut être coûteux. Vous devez ajouter cette valeur de registre aux deux extrémités d'une session Message Queuing. Sinon, l'ordinateur avec la plus petite valeur arrêtera prématurément la session. Une raison courante pour ajouter cette valeur de registre avec une valeur élevée est de maintenir les sessions en vie et d'éviter la surcharge de création de sessions Message Queuing. Dans votre cas, vous devrez peut-être réduire la valeur pour faciliter la gestion des systèmes de fichiers. (Ceci est un appel difficile à faire, et franchement doit être fait avec considération).

En ce qui concerne les correctifs: (probablement plus là-bas, et non spécifique à votre problème que je peux voir)

Le correctif MSMQ 1.0 décrit dans http://support.microsoft.com/kb/304212. La raison de ce correctif est que les clients indépendants Windows Message Queuing 3.0 de Windows sont construits en tant que clients RPC robustes. Sans ce correctif, les appels des clients indépendants de Windows XP Message Queuing 3.0 à MQLocateNext échouent.

Le correctif RPC est décrit dans http://support.microsoft.com/kb/823980. Ce correctif est requis pour activer l'audit sur le client exécutant Windows XP. Ce correctif est également requis pour permettre aux clients exécutant Windows 2000 pour terminer le programme d'installation. Une pensée: que dit le moniteur de performance à propos de vos problèmes d'état de la mémoire? Y a-t-il beaucoup d'échange de disque?

+0

Veuillez également excuser mon manque de connaissance, car je ne suis pas un expert MSMQ et je le connais/l'utilise uniquement via cette bibliothèque tierce. - Le journal est désactivé et il n'y a pas de messages de journal - Si par purge vous voulez dire que les messages sont supprimés? Il y a 0 messages dans la file d'attente et le ralentissement se produit toujours. Ce sont des files d'attente transactionnelles. - Je suis assez sûr que mon ordinateur est patché. Existe-t-il des correctifs MSMQ spécifiques à télécharger? Les ordinateurs sont Win. XP - Beaucoup d'espace disque, la fragmentation pourrait être un problème, mais j'en doute - Privé - Vous voulez expliquer? – mike

+0

Désolé que le dernier commentaire ne soit pas bien formaté ... J'ai aussi trouvé un outil appelé TMQ qui semble faire une analyse supplémentaire. Lorsque le ralentissement se reproduira, j'essaierai de déboguer davantage. – mike

+0

Oui, voici un lien vers une page MS détaillant beaucoup de choses concernant les performances, la mémoire, comment il est géré, etc. http://msdn.microsoft.com/en-us/library/ms811056.aspx Plus Des détails sur la taille des messages, les numéros, etc. pourraient être utiles, ainsi que l'examen du système de fichiers dans lequel les magasins sont conservés. –

Questions connexes