02/03/2010
Står du pludselig over for en kritisk fejl i din applikation, der melder om "Insufficient resources to perform operation" fra Microsoft Message Queuing (MSMQ)? Du er ikke alene. Denne fejl er et klassisk tegn på, at MSMQ har nået sin maksimale lagerkapacitet, hvilket forhindrer den i at behandle eller modtage nye meddelelser. Det kan lamme kritiske systemer, der er afhængige af meddelelseskøer til asynkron kommunikation. Men fortvivl ikke. Denne artikel giver dig en komplet guide til at forstå, diagnosticere og løse problemet, uanset om din MSMQ-tjeneste stadig kører, eller om den nægter at starte.

Hvad er MSMQ og Hvorfor Opstår Fejlen?
MSMQ er en teknologi fra Microsoft, der gør det muligt for applikationer at kommunikere på tværs af netværk og systemer, selv når de ikke er online på samme tid. Det fungerer ved at placere meddelelser i køer, hvor modtagerapplikationen kan hente dem, når den er klar. Problemet opstår, fordi MSMQ har en begrænset mængde hukommelse allokeret til at lagre disse meddelelser. På et standard 32-bit Windows-system er en proces typisk begrænset til 2 GB adresserbar hukommelse. Efter MSMQ-tjenesten selv er indlæst, er der ofte kun mellem 1.6 GB og 1.8 GB tilbage til selve meddelelseslagringen. Når denne grænse nås, afviser MSMQ alle nye meddelelser med fejlen utilstrækkelige ressourcer.

En ofte overset årsag er den indbyggede maskinkvote. Som standard har MSMQ en samlet lagerkvote på 1 GB for hele maskinen. Selv hvis der er ledig hukommelse, vil denne kvote stoppe for nye meddelelser, hvis den overskrides.
Almindelige Årsager til Overfyldte Køer
Før vi dykker ned i løsningerne, er det vigtigt at forstå, hvorfor meddelelser hober sig op. Årsagen er næsten altid en af følgende:
- Modtagerapplikation er nede: Den applikation, der skulle læse og behandle meddelelser fra en kø, er stoppet, har en fejl eller kan ikke følge med den hastighed, hvormed meddelelser ankommer.
- Journalisering er aktiveret: Hvis journalisering er slået til for en kø, gemmes en kopi af hver behandlet meddelelse. Hvis disse journaler ikke regelmæssigt ryddes, kan de vokse sig enorme.
- Dead-Lettering: Meddelelser, der ikke kan leveres eller behandles inden for en bestemt tidsramme, kan ende i en "dead-letter" kø. Ligesom journaler kan disse køer vokse sig store, hvis de ignoreres.
- Utilgængelig Destination: Hvis meddelelser sendes til en kø på en anden maskine, som er offline eller utilgængelig, vil de hobe sig op i den udgående kø på afsendermaskinen.
Løsningsmetode 1: Når MSMQ-tjenesten Stadig Kører
Dette er den bedste situation at være i, da du stadig har adgang til at administrere køerne. Følg disse trin:
- Identificer de problematiske køer: Åbn 'Computeradministration' (Computer Management), naviger til 'Tjenester og programmer' -> 'Message Queuing'. Her kan du inspicere de private, offentlige, system- og udgående køer. Se efter køer med et højt antal meddelelser. Alternativt kan du bruge 'Ydelsesmåler' (Performance Monitor) og tilføje tællere fra 'MSMQ Queue'-objektet for at få et detaljeret overblik.
- Analysér og løs årsagen: Når du har fundet den eller de overfyldte køer, skal du finde den grundlæggende årsag. Er det den udgående kø? Tjek netværksforbindelsen til destinationsmaskinen. Er det en privat kø? Undersøg den applikation, der skulle behandle meddelelserne.
- Ryd op i køerne: Når det underliggende problem er løst, bør applikationen begynde at behandle de ophobede meddelelser. Hvis meddelelserne er forældede eller uvigtige, kan du højreklikke på køen og vælge 'Alle opgaver' -> 'Ryd' (Purge) for at slette dem. Vær forsigtig, da denne handling ikke kan fortrydes. Meddelelserne vil blive permanent ryddet.
En hurtig løsning, der nogle gange virker, er at gå til 'Server Manager' -> 'Features' -> 'Message Queuing' (højreklik) -> 'Properties'. Under 'General'-fanen kan du fjerne fluebenet ved 'storage limits'. Dette vil genstarte MSMQ-tjenesterne og kan i nogle tilfælde løse problemet midlertidigt.

Løsningsmetode 2: Når MSMQ-tjenesten Ikke Vil Starte
Hvis tjenesten ikke kan starte, er det fordi meddelelsesfilerne på disken er for store til at blive indlæst i hukommelsen. Dette kræver mere drastiske metoder.

Vigtigt: Tag en Backup Først!
Før du foretager dig noget, skal du tage en backup af din nuværende MSMQ-konfiguration og meddelelsesfiler. Brug Microsofts eget værktøj, MQbkup.exe, som findes i din `System32`-mappe. Åbn en kommandoprompt og kør:
MQbkup.exe -b D:\MSMQ_Backup
Erstat stien med en placering, hvor der er rigeligt med ledig plads.
Manuel Gendannelse af Meddelelser (Avanceret)
Denne metode er teknisk, men giver dig mulighed for potentielt at redde dine meddelelser. Den indebærer at flytte meddelelsesfilerne ud, starte den tomme tjeneste og derefter flytte dem tilbage i små portioner.

- Stop MSMQ Data Access-driveren for at sikre, at alt er lukket ned: `Net Stop MQAC /y`
- Opret en midlertidig mappe, f.eks. `C:\MSMQ_Temp`.
- Naviger til MSMQ's lagermappe, typisk `C:\Windows\System32\msmq\storage`.
- Flyt alle filer med filtypenavnet .mq til din midlertidige mappe. Efterlad alt andet, især `lqs`-undermappen, hvis den eksisterer.
- Prøv at starte MSMQ-tjenesten: `Net Start MSMQ`. Den bør nu starte, da den er tom.
- Stop tjenesten igen, sammen med data-driveren: `Net Stop MQAC /y`.
- Gå til din midlertidige mappe. Filerne kommer i par, f.eks. `p0000001.mq` og `l0000001.mq`. Find det ældste filpar baseret på datoen.
- Flyt dette ene par tilbage til den oprindelige `msmq\storage`-mappe.
- Start MSMQ-tjenesten igen. Nu skulle du have adgang til de meddelelser, der var i disse filer. Behandl eller slet dem som beskrevet i Metode 1.
- Gentag trin 6-9, hvor du flytter filpar tilbage et ad gangen (eller i små grupper, hvis du har plads), indtil alle filer er flyttet tilbage og alle køer er ryddet. Flyt aldrig mere end ca. 1.5 GB data tilbage ad gangen.
Den Drastiske Løsning: Nulstilling af MSMQ (Fører til Datatab)
Hvis alt andet fejler, og det vigtigste er at få tjenesten online igen (og du kan acceptere at miste alle meddelelser i køerne), kan du udføre en fuld nulstilling.
ADVARSEL: Denne procedure sletter alle meddelelser i dine køer permanent.
- Stop MSMQ-tjenesten.
- Naviger til `C:\Windows\System32\msmq\storage` og slet alle filerne i mappen. Hvis der er en `lqs`-undermappe, skal du lade den være.
- Åbn Registreringseditoren ved at køre regedit.
- Naviger til nøglen: `HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters`.
- Find DWORD-værdien `LogDataCreated` i højre rude, dobbeltklik på den og sæt dens værdi til `0`.
- Luk Registreringseditoren.
- Genstart MSMQ-tjenesten. Tjenesten vil nu starte med et rent lager. Dette sletter alle meddelelser.
Sammenligning af Løsningsmetoder
| Metode | Hvornår den skal bruges | Risiko for datatab | Kompleksitet |
|---|---|---|---|
| Ryd køer (MSMQ kører) | Når tjenesten er online, men køerne er fulde. | Lav (kun hvis du manuelt sletter meddelelser). | Lav |
| Manuel Gendannelse | Når tjenesten ikke vil starte, og meddelelserne er vigtige. | Mellem (risiko for fejl under processen). | Høj |
| Drastisk Nulstilling | Når tjenesten ikke vil starte, og det er acceptabelt at miste alle meddelelser. | Total (alle meddelelser slettes). | Mellem |
Ofte Stillede Spørgsmål (OSS)
- Hvad er standardhukommelsesgrænsen for MSMQ?
- På et 32-bit system er den effektive grænse for meddelelseslagring typisk mellem 1.6 og 1.8 GB på grund af processens 2 GB hukommelsesloft. Derudover er der en standard maskinkvote på 1 GB, som ofte er den reelle begrænsning.
- Er det sikkert at slette .mq filerne?
- Nej, det er ikke sikkert i den forstand, at det vil medføre tab af alle meddelelser, der er gemt i disse filer. Det er en sidste udvej. Prøv altid at behandle eller gendanne meddelelserne først, og tag altid en backup med `MQbkup.exe`.
- Kan jeg bare øge maskinens kvote i stedet?
- Ja, at øge maskinkvoten i MSMQ's egenskaber er en god forebyggende foranstaltning, hvis du forventer store mængder meddelelser. Men hvis tjenesten allerede er nede på grund af fuld hukommelse, kan du ikke ændre indstillingen. Det løser heller ikke det grundlæggende problem med, hvorfor meddelelser hober sig op.
Hvis du vil læse andre artikler, der ligner Løs MSMQ Fejlen 'Utilstrækkelige Ressourcer', kan du besøge kategorien Sundhed.
