Gå til innhold
Trenger du hjelp med PCen? Still spørsmål her! ×

Hvordan DU kan feilsøke Windows! (Guider)


Anbefalte innlegg

Hei!

Som du ser prøver programmet å komme til en ressurs i en kritisk seksjon av systemet (En ressurs delt av flere)

Og prøver derfor å synkronisere data-hentingen over flere prosesser ved å bruke en såkalt Spinlock:

nt!KeAcquireInStackQueuedSpinLock+0x22

Spinlock'en treffer på en Sidevekslingsfeil:

nt!KiPageFault+0x20b

Noe som er en ulovlig operasjon siden all synkronisering skjer på høy (DPC) IRQL.

 

Som du ser skjer denne prosessen under:

audiodg.exe som prosesserer lyd under Vista.

Og skylder på:

NETIO.SYS som håndterer I/O over nettverk.

 

dessverre har jeg ikke så god oversikt over hvordan Vista fungerer i detalj, men problemer ser ut til å oppstå når Vista prøver å synkronisere tilgangen til en ressurs som har med lydprosessering på nettverket.

 

Så om du kunne gitt litt mere info om hva du gjør når kræsjen oppstår og om du har noen spesielle oppsett iforhold til lyd og nettverk.

 

Et lite tips: audiodg.exe ser ut til å ha støtte for å kunne kjøre 3'je parts kode i seg. Jeg ville ha sett på eventuelle lyddriver og slikt og prøvd og oppdatert dem.

Endret av fenderebest
Lenke til kommentar
Videoannonse
Annonse
  • 2 uker senere...

Hvordan feilsøke ytelsesproblemer i Windows:

 

Av og til kan det virke som Windows går unaturlig tregt i forhold til ytelsen på Systemet. Dette skyles svært ofte bakgrunnsprogrammer som er dårlig skrevet som enten bruker unødig prosessorkraft eller allokerer minne og som ikke frigjør det igjen når det ikke har bruk for det. En av de kraftigste verktøyene som å avsløre disse problemene er et program som heter Process Explorer som er et gratis verktøy som gir et mye bedre overblikk over hva som foregår enn Oppgavebehandleren i Windows. Her skal jeg gi en guide over hvordan man enkelt kan bruke dette programmet for å feilsøke noen vanlige ytelsesrelaterte problemer.

 

Først og fremst trenger du Process Explorer som er et gratis verktøy fra Windows Sysinternals. Dette gir et mye bedre overblikk over hva prosessene foretar seg en Windows sin egen oppgavebehandler. Process Explorer kan lastes ned her

 

Hvilke programmer bruker prosessorkraften min?

I windows sin innebygde oppgavebehandler har du en kolonne som heter CPU som viser hvilke programmer som bruker Prosessoren din i en prosentvis fordeling. dessverre gir denne indikatoren et løgnaktig og feil bilde av hvilke programmer som benytter seg av prosessoren din og hvor stor kapasitet hver enkelt prosess bruker. Hvorfor? Vel måten oppgavebehandleren måler hvilke programmer som bruker prosessorkraft er ved å sende et avbrudd til prossoren for hvert gang systemklokken tikker. Dette intervallet er da satt til ca 10ms for x86 systemer med enkelt prosessorer og ca 15ms for x86 systemer med multiprosessorer.

 

Dette betyr da altså at der "kun" hvert 15ms denne ytelsesmålingen foretas og da sjekker windows bare de prosessene som kjører akkurat i det øyeblikket da målingen foretas. Dette betyr da at noen prosesser får skylden for å bruke mye mer prosessorkraft enn de egentlig gjør mens andre igjen er timet på en slik måte at det vil virke som de ikke bruker noen prosessorkraft mens de egentlig gjør en hel del.

 

Så for å kunne se hvilke programmer som bruker Prosessorkraften vår er det nødvendig med et mer avanserte program, Process Explorer for å feilsøke dette problemet. En nyttig egenskap Process Explorer har er evnen til å vise hvor mange Context Switcher hver enkelt prosess har. En Context switch er rett og slett en prosedyre som lagrer tilstanden til tråden som kjører og deretter laster inn data forbundet med den neste tråden og kjører denne. Tråder er rett og slett en enhet som en prosess kan overføre kjørbar kode i. Når man sier at en prosess kjører er det altså egentlig trådene i prosessen som kjører koden.

 

Så for å kunne finne ut hvilke prosesser som EGENTLIG stikker av med prosessorkraften vår må vi legge til kolonnen Context Switch Delta i Process Explorer. Denne vil da vise hvor mange Context Switcher som skjer i en prosess i faste intervaller. (Som du selv velger i Process Explorer) Dette gjøres ved å:

 

1.Åpne Process Explorer.

2.Velg View menyen og velg Select Columns valget fra denne menyen.

3.Velg deretter fanen som heter Process Performance.

4.Huk av for Context Switch Delta og trykk OK.

 

post-56823-1206196759_thumb.jpg

 

Her er et udrag fra Process Explorer som viser systemet som Idler sortert etter Context Switch Delta. Intervallene mine er satt til 1 sekund i Process Explorer så dette viser altså hvor mange Context Switcher som skjedde iløpet av 1 sekund i disse prosessene:

 

post-56823-1206196250_thumb.jpg

 

Vi ser at prosessen csrss gjør 241 Context-Switch i sekundet uten at denne gir noen utslag på prosessorindikatoren. Dette betyr at denne er timet på en slik at den unngår å bli målt i klokke intervallene. Csrss (Client-Server runtime subsystem) er en kritisk systemprosess som bla er ansvarlig for å lage og slette tråder og prosesser. Så denne aktiviten anser jeg som normal på dette systemet. Vi ser også at selv om services.exe i realiteten nesten ikke brukte noen prossesorkraft i forhold til de andre prosessene så får den skylden for 0.76% av prosessorbruken. Dette er pga den får skylden for all prosessorbruken til ALLE de andre prosessene som ikke ble målt.

 

En annen smart ting ved Process Explorer er at den viser Maskinvareavbrudd (Interrupts) og Utsatte prosedyrekall (DPC). Feks kan en dårlig driver eller defekt maskinvare gi en overdreven strøm av avbrudd eller DPC-kall. Dette kan da feilsøkes videre med feks Kernrate i forsøk på å finne ut hva som er galt.

 

 

Hvilke programmer stjeler av minnet mitt?

 

En annet problem som kan gi ytelsesproblemer er programmer som bruker mye minne, enten de trenger det eller ei. Igjen kan oppgavebehandleren i Windows gi et dårlig bilde av hvilke programmer som bruker mye minne da default konfigurasjonen er satt til å vise en prosess sitt Working Set. Det vil si hvor stor del av den virituelle addresseområdet som finnes fysisk i minnet.

 

Dette kan gi et løgnaktig bilde av minnebruken da det finnes applikasjoner som kan ta uhorvelige mengder virituellt minne uten å nødvendigvis ta så mye av det fysiske. Man kan legge til ekstra kolonner i Oppgavebehandleren for å få et mere nøyaktig bilde, men selv her er det litt mangelfull informasjon samtidig med at navnene kan være villedende, så det aller beste programmet for å feilsøke minneproblemer er altså Process Explorer.

 

For å sette opp Process Explorer for å vise relevant minneinformasjon kan man bruke denne konfigurasjonen:

1.Åpne Process Explorer

2.Velg View-menyen og velg videre Select Columns fra denne menyen.

3.Velg fanen Process Memory.

4.Huk av for Working Set Size,Private Bytes og Virtual Size og trykk OK.

5.Om du feilsøker minnelekasjer kan Private Delta Bytes og Private Bytes History også være interessant å se på.

6.Du kan også huke bort den informasjonen som ikke er relevant til feilsøking av minnet (Ting under Process Performance og Process Image feks. Gir et ryddigere oppsett)

 

Oppsett:

post-56823-1206281620_thumb.jpg

 

Du kan også lagre dette Kolonneoppsettet ved å velge Save Column Set fra View-menyen slik at du kan veksle mellom oppsett for å feilsøke minneproblemer og prosessorproblemer.

 

Her er et utdrag over hvilke prosesser som forbruker mest "Private Bytes"

post-56823-1206281999_thumb.jpg

 

Private Bytes er altså hvor stor del av det virituelle minnet til denne prosessen som BARE tilhører denne prosessen og som ikke er delt med noen andre. Virtual Size er altså totalen. Man skal naturligvis holde et øye med alle kolonenne men Private bytes og Working Set size er egentlig de to viktigste.

Endret av fenderebest
Lenke til kommentar

Det er fortsatt litt aktivitet her eller?

Jeg satt sammen min nye maskin i går, og har brukt dagen på å legge inn programmer og også noen drivere. Min samboer satt å spillte Sims2 da maskinen fikk en BSOD. Jeg har fulgt oppskriften i første post.

Det kommer også en masse meldinger i WinDbg om at symbolene ikke er riktige.

"Your debugger is not using the correct symbols"

 

Her er i hvertfall .dmp-fila, hvis en smart sjel har lyst til å se, en liten sneak preview: "MODULE_NAME: nt"

http://student.hive.no/jwiers/filr/uploads...ni032908-01.dmp

 

EDIT:

Heisann igjen ja... Ny bsod. Igjen mens sims2 ble spillt.

I stad var det IRQL_...blablabla, nå var det BAD_POOL_CALLER, med 0xC2 som parameter.

 

Jeg har forresten Vista x64, og sims2 med alle mulige orginale ekstra pakker.

her er dumpen: http://student.hive.no/jwiers/filr/uploads...ni032908-02.dmp

 

EDIT2:

Dagens tredje bsod har kommer og gått, og denne gangen var det DRIVER_IRQL_NOT_LESS_OR_EQUAL. Og det var en feil i rtlh64.sys, som er driver til NIC'et jeg bruker.

BSOD skjedde når jeg spiste middag, men PC-en stod inne i spillet Red Orchestra, og inne i serverlista der.

 

Tidligere i dag kjøre jeg win update, og den ville da oppdatere nettverkskort-driverene, og det klikket jeg ja til. Det som skjedde da var at det ene NIC'et ble oppdatert (har to like), men ikke det andre. Jeg fikk ikke noe IP, og alt klikket mongo, så jeg tok rollback på den jeg oppdaterte. Kan jo selvfølgelig oppdatere driverene gjennom noe annet enn win update. Men i forhold til de tidligere bsod'ene i dag, så bruker jo ikke sims2 nettet, men jeg har vært pålogget nettet hele tiden uansett, på msn og utorrent og sånn.

Hm... begynner å bli irriterende og frustrerende.

http://student.hive.no/jwiers/filr/uploads...ni032908-03.dmp

 

EDIT3:

Fikk oppdatert driverene til begge korta problemfritt. Disse driverene er en måned gamle, så får håpe den siste bsod'en var et isolert tilfelle, og håpe at de to første skyldes software, kanskje sims2 :p

Endret av jale
Lenke til kommentar

Har ikke lasted ned x64 symboler siden jeg har for dårlig linje. Så når jeg får tak i disse kan jeg gå over kræsjdumpene, hvis ikke noen andre kunne tenke seg å åpne dem kjøre !analyze -v og poste innholdet- gjerne i skjult tekst slik at det ikke blir så langt.

 

Litt rart at Windbg ikke klarte å laste symbolene skikkelig, husket du å sette Image-path?

 

Når du før mange forskjellige blåskjermer bør man feilsøke dem i Windbg for å prøve å finne en fellesnevner.

Endret av fenderebest
Lenke til kommentar

Ja, det var det jeg også tenkte da... Jeg har lagt inn den pathen som du skrev i første-posten begge steder ja...

 

Jeg har jo en som jeg tror jeg har eliminert nå da, ved å oppdatere driverene til NIC'et ordentlig, dette var også den eneste som jeg fant ut av feilkilden på.

 

Begge de to andre kom under spilling av Sims2, som jeg har en følelse av at er litt buggy :p Og begge to kom etter ca. like lang spilletid. Naboen min trodde det enten var sims2 eller directX. Skal gå gjennom de litt mer i morra, har hatt litt dårlig tid i dag.

 

Som utgangspunkt nå, før noe annet skjer igjen, så ser jeg på det siste som et isolert tilfelle som ville kommet uansett slik som det ble med NIC-driverene tidligere i dag.

De to første vet jeg ikke om har noe sammenheng, selv om de begge sa "MODULE_NAME: nt".

Lenke til kommentar

Den første: "Probably caused by : ntoskrnl.exe ( nt+55390 )"

Den andre: "Probably caused by : ntoskrnl.exe ( nt+55390 )"

Den tredje: "Probably caused by : Rtlh64.sys ( Rtlh64!MpHandleSendInterrupt+115 )"

 

Den siste tror jeg at jeg har fått fikset som sagt...

 

Nå har jeg også lastet ned symbolene til vista SP1 x64 på maskinen, men den maser fortsatt om at jeg ikke har de riktige, men jeg fikk da i hvertfall ut mer informasjon nå enn før.

Lenke til kommentar

Den laster de ned fra internett og som du ser nt+55390 får du bare opp modulen som da er nt(ntoskrnl) det som egentlig er interssant er mere funksjonen (55390) som man ikke vet hva er siden man ikke har fått symboler inn skikkelig.

 

Det ser vertfall ut som den laster image-banen skikkelig, nå er det bare symbol-banen som mangler. Så lenge du har internett har jeg aldri opplevd at microsoft sin symbol server ikke har fungert så dette er litt rart?

 

Prøv å last ned symbolene og pek image-banen til symbolene og deretter symbol banen til symbol-serveren (altså srv*c:\symbols*http://msdl.microsoft.com/downloads/symbols )

Lenke til kommentar

Det funker heller ikke altså. Samme som før.

 

Og nå spillte jeg Crysis, og fikk bsod igjen, og det stod "A clock interrupt was not recived on a secondary processor within the allocated time interval"...

Denne gangen fryste hele maskinen seg også i bsod'en, så den fikk ikke dumpet noe...

Endret av jale
Lenke til kommentar

Hvilken versjon av SP1 er det du har egentlig? Er det den ferdige?

Vel jeg kjører igjennom en analyse uten symboler, dette blir litt mere kinkig men la oss se på stakken:

 

 

Stakk 1

1: kd> kb

RetAddr : Args to Child : Call Site

fffff800`01946f98 : 00000000`000000c2 00000000`00000007 00000000`0000110b 00000000`042d0008 : nt+0x55390

00000000`000000c2 : 00000000`00000007 00000000`0000110b 00000000`042d0008 fffffa80`04575320 : nt+0x134f98

00000000`00000007 : 00000000`0000110b 00000000`042d0008 fffffa80`04575320 00000000`00000000 : 0xc2

00000000`0000110b : 00000000`042d0008 fffffa80`04575320 00000000`00000000 00000000`00000018 : 0x7

00000000`042d0008 : fffffa80`04575320 00000000`00000000 00000000`00000018 fffff800`0185c18f : 0x110b

fffffa80`04575320 : 00000000`00000000 00000000`00000018 fffff800`0185c18f fffffa80`04537fa8 : 0x42d0008

00000000`00000000 : 00000000`00000018 fffff800`0185c18f fffffa80`04537fa8 fffff800`01d2be45 : 0xfffffa80`04575320

00000000`00000018 : fffff800`0185c18f fffffa80`04537fa8 fffff800`01d2be45 00000000`00000000 : 0x0

fffff800`0185c18f : fffffa80`04537fa8 fffff800`01d2be45 00000000`00000000 fffff800`01825731 : 0x18

fffffa80`04537fa8 : fffff800`01d2be45 00000000`00000000 fffff800`01825731 fffffa80`03fac530 : nt+0x4a18f

fffff800`01d2be45 : 00000000`00000000 fffff800`01825731 fffffa80`03fac530 00000000`00000000 : 0xfffffa80`04537fa8

fffff800`01d2eff6 : 00000000`00000000 00000000`00000001 fffffa60`0107dd00 fffffa80`04575340 : hal!HalpDmaAllocateMapRegisters+0x71

fffffa80`067a14e0 : 00000000`00000001 00000000`00000001 00000000`00000000 fffffa80`0744bac0 : hal!HalAllocateAdapterChannel+0x11a

00000000`00000001 : 00000000`00000001 00000000`00000000 fffffa80`0744bac0 00000000`00000000 : 0xfffffa80`067a14e0

00000000`00000001 : 00000000`00000000 fffffa80`0744bac0 00000000`00000000 00000000`00000000 : 0x1

00000000`00000000 : fffffa80`0744bac0 00000000`00000000 00000000`00000000 00000000`00000001 : 0x1

fffffa80`0744bac0 : 00000000`00000000 00000000`00000000 00000000`00000001 fffffa80`04575340 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000001 fffffa80`04575340 fffffa80`04575340 : 0xfffffa80`0744bac0

00000000`00000000 : 00000000`00000001 fffffa80`04575340 fffffa80`04575340 fffffa80`0679daa0 : 0x0

00000000`00000001 : fffffa80`04575340 fffffa80`04575340 fffffa80`0679daa0 00000000`00000000 : 0x0

 

Stakk 2

 

0: kd> kb

RetAddr : Args to Child : Call Site

fffff800`018b712e : 00000000`0000000a fffffa80`080849e8 00000000`00000002 00000000`00000000 : nt+0x55390

00000000`0000000a : fffffa80`080849e8 00000000`00000002 00000000`00000000 fffff800`0181e268 : nt+0x5512e

fffffa80`080849e8 : 00000000`00000002 00000000`00000000 fffff800`0181e268 fffffa60`0271c216 : 0xa

00000000`00000002 : 00000000`00000000 fffff800`0181e268 fffffa60`0271c216 be91f0c1`be91f0c1 : 0xfffffa80`080849e8

00000000`00000000 : fffff800`0181e268 fffffa60`0271c216 be91f0c1`be91f0c1 be91f0c1`be91f0c1 : 0x2

fffff800`0181e268 : fffffa60`0271c216 be91f0c1`be91f0c1 be91f0c1`be91f0c1 41d515d6`41d515d6 : 0x0

be91f0c1`be91f0c1 : 41d515d6`41d515d6 41d515d6`41d515d6 00000000`00000000 00000000`00000000 : hal!HalpDmaNextContiguousPiece+0x68

41d515d6`41d515d6 : 41d515d6`41d515d6 00000000`00000000 00000000`00000000 00000000`00000000 : 0xbe91f0c1`be91f0c1

41d515d6`41d515d6 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x41d515d6`41d515d6

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x41d515d6`41d515d6

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : 0x0

 

 

Problemet her er da i første stakk rett og slett et forsøk på å frigjøre et område i minnet som allerde er frigjort mens i det andre møter den på en sidevekslingsfeil når IRQL er høy.

 

Fellesnevneren her er altså at begge disse feilene skjer under DMA-minne operasjoner, så da gjetter jeg på at det er fra når den leser fra CD-rom'en dette skjer.

 

Sitter det noen filterdrivere på enten kontrolleren eller CD-rom drevet? Kan du prøve å kjøre med CD-rom i PIO for å se om problemet gjentar seg.

 

Evt bruker du noen program for å lage virituelle drev? (Alcohol deamon tools osv)

Endret av fenderebest
Lenke til kommentar

Filterdrivere kan sitte over eller under en funksjonsdriver eller over en bussdriver. Poenget med disse er at de kan se og endre data som funksjonsdriveren benytter seg av. Feks kan keyboard loggere sette en filterdriver over funksjondriveren til keyboardet for å logge det som skrives.

 

Sjekk i enhetsbehandling både for kontrolleren og DVD-drevet etter filterdrivere som ikke skal være der. Dette gjør du ved å gå inn på egenskaper for kontroller/cd-rom deretter velger du fanen detaljer og sjekker ut Øvre filter for enhet, Nedre filter for enhet, Øvre filter for klasse, Nedre filter for klasse.

 

For cd-rom er standrard Øvre filter for enhet: redbook og Nedre filter: imapi.

 

Det er også i egenskapene for kontrolleren du setter den til å bruke PIO eller DMA.

Lenke til kommentar
  • 4 uker senere...

Har et problem med blåskjermer, her er specs PC.

 

Blåskjermene er PAGED_FAULT_IN_NONPAGED_AREA

DRIVER_IRQL_LESS_THAN_EQUAL

IRQL_LESS_THAN_EQUAL

 

(har også vært en MEMORY_MANAGMENT og en nv4.dssl eller noe som jeg ikke helt fikk med meg, men det er de 3 første som har skjedd oftest)

 

Det merkelige er at dette skjer bare i noen type spill under lengere tids spilling, crysis, ghost recon på høy grafikk, AoC.

 

Det som dukker opp når jeg googler de blåskjermene er at alle har minne problemer, men fortsatt så henger det ikke på rim at det skal skje i bare noen spill. Kan minnet vise feil hvis det blir presset hardt?

 

Men logikken min sier at det er et grafikk driver problem, hadde BS før og etter nedlasting av nyeste nvidia drivere, så må anta at det er muligens driverne fra CDen som det er noe feil med. I rivaturner får jeg opp:

 

nv4_disp.dll

nv4_mini.sys

og noen flere, de er alle versjon 169.21

 

men så er det to andre:

nvshell.dll

nvwdmcpl.dll

Disse er versjon 111.32

 

Kunne du gitt meg en raskt innføring i hvordan jeg får sletta de gamle driverne slik at det bare er de nye igjen? (hvis du tror det kan være problemet).

 

Jeg har kjørt driver krasjtesting som i guiden, og prøvd med nvidia driverne, har ikke krasjet enda. Også på blåskjerm-analysering fikk jeg ikke det helt til å åpne miniloggene i windbg.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...