8 min

Mark Russinovich & Windows Internals: osservabilità e affidabilità

Scopri come la mentalità Windows Internals di Mark Russinovich ha plasmato Sysinternals, i workflow WinDbg e l'osservabilità pratica per debugging e affidabilità su Windows.

Mark Russinovich & Windows Internals: osservabilità e affidabilità

Perché Mark Russinovich conta ancora per le operazioni su Windows

Se gestisci Windows in produzione—su laptop, server, VDI o VM cloud—il lavoro di Mark Russinovich continua a presentarsi nelle operazioni quotidiane. Non per nostalgia o personalità, ma perché ha contribuito a rendere comune un approccio alla risoluzione dei problemi basato sulle prove: guarda cosa sta realmente facendo il sistema operativo, poi spiega i sintomi con prove.

Tre idee in parole semplici

Osservabilità significa poter rispondere “cosa sta succedendo adesso?” usando i segnali che il sistema produce (eventi, trace, contatori). Quando un servizio rallenta o i logon si bloccano, l'osservabilità è la differenza tra indovinare e sapere.

Debugging è trasformare un problema vago (“si è bloccato”) in un meccanismo specifico (“questo thread è bloccato su I/O”, “questo processo sta usando intensamente il file di paging”, “questa iniezione di DLL ha cambiato il comportamento”).

Affidabilità è la capacità di continuare a funzionare sotto stress e di recuperare in modo prevedibile—meno incidenti, ripristini più rapidi e cambiamenti più sicuri.

Perché la conoscenza degli internals accelera la risoluzione degli incidenti

La maggior parte dei “misteriosi blackout” non sono misteri—sono comportamenti di Windows che non hai ancora mappato: leak di handle, processi figli incontrollati, driver bloccati, timeout DNS, voci di avvio automatico rotte o strumenti di sicurezza che aggiungono overhead. Una conoscenza di base degli internals di Windows (processi, thread, handle, servizi, memoria, I/O) ti aiuta a riconoscere rapidamente i pattern e a raccogliere le prove giuste prima che il problema svanisca.

Cosa ti aiuterà a fare questo articolo

Ci concentreremo su workflow pratici e orientati alle operazioni usando:

  • Sysinternals (in particolare Process Explorer e Process Monitor) per visibilità rapida e a basso attrito
  • ETW tracing quando i log non bastano e serve una timeline fedele di “cosa è successo”
  • WinDbg e dump di crash/hang per trasformare i fallimenti in cause radice azionabili

L'obiettivo non è trasformarti in un ingegnere del kernel. È rendere gli incidenti Windows più brevi, più calmi e più facili da spiegare—così le correzioni sono più sicure e ripetibili.

Gli internals Windows come superpotere per il troubleshooting

Gli “internals” di Windows sono semplicemente l'insieme dei meccanismi che Windows usa per lavorare: schedulazione dei thread, gestione della memoria, avvio dei servizi, caricamento dei driver, attività su file e registry, e applicazione dei confini di sicurezza. La promessa pratica è semplice: quando capisci cosa sta facendo l'OS, smetti di indovinare e inizi a spiegare.

Questo conta perché la maggior parte dei sintomi operativi è indiretta. “La macchina è lenta” potrebbe essere contesa CPU, un singolo thread caldo, una tempesta di interrupt da driver, pressione di paging o un filtro antivirus che blocca l'I/O. “Si blocca” potrebbe essere un deadlock, una chiamata di rete ferma, un timeout di storage o un servizio in attesa di una dipendenza. La conoscenza degli internals trasforma lamentele vaghe in ipotesi testabili.

Modalità user vs kernel (quanto basta per essere utili)

A un livello alto, la user mode è dove girano la maggior parte delle app e dei servizi. Quando vanno in crash, di solito vengono giù solo loro. La kernel mode è dove gira Windows stesso e i driver; qui i problemi possono congelare l'intero sistema, causare un bugcheck (blue screen) o degradare silenziosamente l'affidabilità.

Non serve teoria profonda per usare questa distinzione—basta abbastanza per scegliere le prove. Un'app che consuma CPU è spesso user mode; reset ripetuti dello storage o problemi del driver di rete spesso puntano alla kernel mode.

Troubleshooting basato sulle prove

La mentalità di Russinovich—riflessa in strumenti come Sysinternals e nel libro Windows Internals—è “prima le prove”. Prima di cambiare impostazioni, riavviare a caso o reinstallare, cattura cosa sta facendo il sistema: quale processo, quale thread, quale handle, quale chiave di registro, quale connessione di rete, quale driver, quale evento.

Una volta che sai “cosa sta facendo Windows adesso e perché”, le correzioni diventano più piccole, più sicure e più facili da giustificare—e il lavoro di affidabilità smette di essere lotta reattiva contro gli incendi.

L'approccio Sysinternals: rendere visibile l'invisibile

Sysinternals è meglio inteso come un “kit di visibilità” per Windows: utilità piccole e portabili che rivelano cosa sta realmente facendo il sistema—processo dopo processo, handle dopo handle, chiave di registro dopo chiave di registro. Invece di trattare Windows come una scatola nera, Sysinternals ti permette di osservare il comportamento dietro sintomi come “l'app è lenta”, “CPU alta” o “il server perde connessioni”.

Fidati ma verifica: non indovinare, misura

Molto dolore operativo nasce da ipotesi ragionevoli: è colpa del DNS, probabilmente è l'antivirus, Windows Update è di nuovo impallato. La mentalità Sysinternals è semplice: fidati delle tue intuizioni abbastanza da formare un'ipotesi, poi verificane la validità con le prove.

Quando vedi quale processo consuma CPU, quale thread è in attesa, quale percorso file è battuto o quale valore di registro viene riscritto, smetti di discutere opinioni e inizi a restringere le cause. Questo passaggio—from narrazione a misurazione—è ciò che rende gli internals pratici, non accademici.

Perché Sysinternals brilla durante gli incidenti live

Questi strumenti sono costruiti per il momento “tutto è in fiamme”:

  • Basso attrito: molti strumenti girano senza installazione e si avviano rapidamente.
  • Feedback veloce: puoi validare o rigettare un'ipotesi in pochi minuti.
  • Visibilità mirata: ogni utilità risponde a una classe specifica di domande (processi, elementi di avvio, endpoint di rete, uso della memoria).

Questo conta quando non puoi permetterti un lungo ciclo di setup, un rollout di agent pesante o un riavvio solo per raccogliere dati migliori.

Principi di uso sicuro

Sysinternals è potente e il potere richiede guardrail:

  • Esegui quando serve: inizia con osservazione in sola lettura; eleva i privilegi solo se necessario.
  • Documenta quello che fai: registra timestamp, filtri e azioni intraprese così i risultati sono ripetibili.
  • Minimizza le interruzioni: preferisci catturare prove (screenshot, log, trace esportati) piuttosto che “provare correzioni” durante l'incidente.
  • Cambia con cautela: se devi modificare un'impostazione o terminare un processo, annota la ragione e l'outcome atteso, poi verifica i risultati.

Usato così, Sysinternals diventa un metodo disciplinato: osserva l'invisibile, misura la verità e applica cambiamenti giustificati, non speranzosi.

Process Explorer & Process Monitor: la coppia quotidiana per il debug

Se puoi tenere solo due strumenti Sysinternals nella tua cassetta degli attrezzi, tieni Process Explorer e Process Monitor. Insieme rispondono alla maggior parte delle domande “cosa sta facendo Windows adesso?” senza richiedere agent, riavvio o setup pesante.

Process Explorer: risposte rapide in pochi secondi

Process Explorer è il Task Manager con la vista a raggi X. Quando una macchina è lenta o instabile, ti aiuta a individuare quale processo è responsabile e a cosa è collegato.

È particolarmente utile per:

  • CPU e thread: quale processo sta consumando CPU, e è un thread caldo o molti?
  • Relazioni parent/child: cosa ha avviato il processo (servizio, task schedulato, updater, azione utente)?
  • DLL e handle: quali moduli sono caricati e quali file/chiavi/pipe il processo tiene aperti?

Quest'ultimo punto è una superpotenza per l'affidabilità: “Perché non posso cancellare questo file?” spesso diventa “Questo servizio ha un handle aperto su di esso.”

Process Monitor: la traccia completa delle attività

Process Monitor (Procmon) cattura eventi dettagliati su file system, registry e attività di processo/thread. È lo strumento per domande come: “Cosa è cambiato quando l'app si è bloccata?” o “Cosa martella il disco ogni 10 minuti?”

Prima di premere Capture, definisci la domanda:

  • Qual è il sintomo (logon lento, disco alto, crash, access denied)?
  • Quando succede (all'avvio, alle 09:00, dopo lo sleep)?
  • Quale macchina e in quale contesto utente (solo un server, solo un profilo utente, solo in VPN)?

Cattura solo ciò che serve (il rumore è il nemico)

Procmon può sopraffare se non filtri con decisione. Inizia con:

  • Filtra per Process Name o PID specifico.
  • Usa regole Include per i percorsi che ti interessano (es., una cartella di config) ed escludi il resto.
  • Cattura per una finestra breve attorno al sintomo, poi ferma.

Cosa ottieni

I risultati comuni sono molto pratici: identificare un servizio che fa query ripetute su una chiave di registro mancante, individuare una scansione real-time che tocca migliaia di file, o trovare un tentativo di caricamento DLL mancante (“NAME NOT FOUND”) che spiega perché un'app non parte su una macchina ma funziona su un'altra.

Autoruns, TCPView, RAMMap: indizi rapidi senza setup pesante

Automatizza i primi 15 minuti
Trasforma la checklist observe→capture→explain in un flusso guidato per i responder.

Quando una macchina Windows “non va”, spesso non serve uno stack di monitoring completo per prendere slancio. Un piccolo set di strumenti Sysinternals può rispondere rapidamente a tre domande pratiche: Cosa si avvia automaticamente? Chi comunica in rete? Dove è finita la memoria?

Autoruns: l'affidabilità inizia al boot

Autoruns è il modo più rapido per capire tutto ciò che può partire senza che un utente lo esegua esplicitamente: servizi, scheduled task, shell extension, driver e altro.

Perché è importante per l'affidabilità: gli elementi di avvio sono fonti frequenti di boot lenti, hang intermittenti e spike di CPU che appaiono solo dopo il login. Un updater instabile, un helper di driver legacy o una shell extension rotta possono degradare l'intero sistema.

Suggerimento pratico: concentrati sulle voci non firmate, appena aggiunte o che non riescono a caricare. Se disabilitare un elemento stabilizza la macchina, hai trasformato un sintomo vago in un componente specifico che puoi aggiornare, rimuovere o sostituire.

TCPView: conferma chi ascolta e chi parla

TCPView ti dà una mappa istantanea delle connessioni attive e delle porte in ascolto, legate a nomi di processo e PID. È ideale per check rapidi:

  • porte LISTENING inaspettate (soprattutto su server che dovrebbero essere silenziosi)
  • un singolo processo che possiede un numero insolitamente alto di connessioni
  • rapido churn di connessioni che si correla a CPU o latenza

Anche per indagini non di sicurezza, questo può scoprire agent fuori controllo, proxy mal configurati o “storm di retry” dove l'app sembra lenta ma la causa è il comportamento di rete.

RAMMap: pressione di memoria senza congetture

RAMMap ti aiuta a interpretare la pressione di memoria mostrando dove la RAM è effettivamente allocata.

Una distinzione di base utile:

  • Working set: la RAM fisica usata attivamente dai processi in esecuzione
  • Cache / standby: Windows mantiene dati in memoria per velocizzare le operazioni (non è necessariamente un male)

Se gli utenti segnalano “memoria bassa” mentre il Task Manager sembra confuso, RAMMap può confermare se hai vera crescita dei processi, un heavy file cache o qualcosa come un driver che consuma memoria non-paginabile.

Opzionale: Handle e VMMap quando sospetti leak

Se un'app rallenta nel corso di giorni, Handle può rivelare contatori di handle in crescita senza controllo (pattern classico di leak). VMMap aiuta quando l'uso di memoria è strano—frammentazione, grandi regioni riservate o allocazioni che non compaiono come semplici “private bytes”.

Una checklist ripetibile per i primi 15 minuti

  1. Autoruns: scansione per voci nuove/non firmate; disabilita un elemento sospetto alla volta.
  2. TCPView: verifica listener attesi; identifica i principali proprietari di connessioni.
  3. RAMMap: controlla se la pressione è crescita dei working set o cache/standby.
  4. Se i sintomi sono basati sul tempo: cattura snapshot “prima/dopo” (conteggi, porte, totali di memoria).
  5. Se la crescita è evidente: usa Handle/VMMap per confermare un pattern di leak.
  6. Annota il componente sospetto e le prove così la correzione è mirata, non frutto di congetture.

Dai log a ETW: costruire vera osservabilità su Windows

Le operazioni su Windows spesso partono da ciò che è più facile da prendere: Event Viewer e qualche screenshot del Task Manager. Va bene per briciole, ma una risposta agli incidenti affidabile richiede tre tipi complementari di segnali: log (cosa è successo), metriche (quanto è grave) e trace (cosa faceva il sistema momento per momento).

Event logs: ottimi indizi, copertura imperfetta

I registri eventi Windows sono eccellenti per identità, ciclo di vita dei servizi, cambi di policy ed errori a livello di app. Sono però disomogenei: alcuni componenti loggano molto, altri poco, e i testi possono essere vaghi (“L'applicazione ha smesso di rispondere”). Trattali come un'ancora temporale, non come tutta la storia.

Vittorie comuni:

  • eventi di avvio/arresto e crash di servizi
  • eventi di autenticazione/autorizzazione
  • eccezioni applicative (quando le app effettivamente le registrano)

Metriche durante gli outage: quelle poche che contano

I contatori di prestazione rispondono a “la macchina è sana?”. Durante un outage, inizia con:

  • CPU: CPU alta sostenuta, ready time (VM), CPU per processo
  • Disco: lunghezza della coda, latenza lettura/scrittura, IOPS, spazio libero
  • Memoria: committed bytes, commit limit, hard faults/sec, utilizzo pool
  • Rete: retransmit, errori, byte/sec, conteggi di connessioni

Le metriche non ti diranno perché è avvenuto un picco, ma diranno quando è iniziato e se sta migliorando.

ETW in parole semplici: tracing strutturato e ad alto volume

Event Tracing for Windows (ETW) è il flight recorder integrato di Windows. Invece di messaggi testuali ad-hoc, ETW emette eventi strutturati dal kernel, dai driver e dai servizi ad alto volume—attività di processo/thread, I/O su file, accesso al registry, TCP/IP, scheduling e altro. A questo livello molti “stall misteriosi” diventano spiegabili.

Scegliere i segnali (senza collezionare tutto)

Una regola pratica:

  • Usa i log per eventi discreti (crash, restart, fallimento di autenticazione).
  • Usa le metriche per rilevare e quantificare l'impatto (latenza, saturazione).
  • Usa ETW quando hai bisogno di causalità (cosa bloccava, quale I/O, quale call path).

Evita di “attivare tutto per sempre.” Mantieni una baseline sempre attiva piccola (log chiave + metriche core) e usa catture ETW brevi e mirate durante gli incidenti.

La correlazione temporale è la superpotenza

Le diagnosi più rapide vengono dall'allineare tre orologi: segnalazioni utenti (“10:42 si è bloccato”), inflection point nelle metriche (spike CPU/disco) e eventi/log/ETW con lo stesso timestamp. Quando i tuoi dati condividono una base temporale coerente, gli outage smettono di essere congetture e diventano narrazioni verificabili.

Sysmon Telemetry: segnali di sicurezza che aiutano anche l'affidabilità

I log evento di default di Windows sono utili, ma spesso non catturano i dettagli del “perché ora?” che gli operatori necessitano quando qualcosa cambia inaspettatamente. Sysmon (System Monitor) colma questa lacuna registrando attività di sistema e processi ad alta fedeltà—soprattutto avvii, persistenza e comportamento dei driver.

Cosa aggiunge Sysmon (oltre ai log di default)

La forza di Sysmon è il contesto. Invece di “un servizio è partito”, spesso puoi vedere quale processo lo ha avviato, con command line completa, processo padre, hash, account utente e timestamp nitidi per la correlazione.

Questo è prezioso per l'affidabilità perché molti incidenti iniziano da piccoli cambiamenti: un nuovo scheduled task, un updater silenzioso, uno script fuori controllo o un driver che si comporta male.

Config minimale: parti stretti con intenzione

Una configurazione Sysmon “logg tutto” è raramente una buona prima mossa. Parti con un set minimo focalizzato sull'affidabilità e espandi solo quando hai domande chiare.

Buoni candidati iniziali:

  • Creazione processi (lanci inaspettati, command line sospette)
  • Caricamento driver (componenti kernel nuovi o che cambiano)
  • Caricamento immagini/DLL (usalo selettivamente per problemi di dipendenze)
  • Attività di servizi e scheduled task (persistence e cambiamenti background)
  • Connessioni di rete / DNS (abilita solo per indagini specifiche per gestire il volume)

Affina con regole include mirate (percorsi critici, account di servizio noti, server chiave) e regole exclude per agent rumorosi così il segnale resta leggibile.

Casi d'uso operativi che vedrai davvero

Sysmon aiuta spesso a confermare o escludere scenari comuni di “cambiamento misterioso”:

  • un nuovo processo helper che si genera sotto un account di servizio prima di spike di CPU
  • un binario di servizio che cambia percorso o tipo di avvio dopo un ciclo di patch
  • un aggiornamento driver che coincide con nuovi hang, bugcheck o reset storage/rete

Precauzioni operative

Testa l'impatto su macchine rappresentative prima di un rollout. Sysmon può aumentare I/O disco e il volume di eventi, e la raccolta centralizzata può diventare costosa rapidamente.

Tratta inoltre campi come command line, nomi utenti e percorsi come sensibili. Applica controlli di accesso, limiti di retention e filtri prima di un'ampia distribuzione.

Complementare, non sostitutivo, del resto dell'osservabilità

Sysmon è migliore come breadcrumb ad alto valore. Usalo insieme a ETW per domande di performance approfondite, a metriche per il rilevamento delle tendenze e a note disciplinate di incidente così puoi collegare cosa è cambiato a cosa si è rotto e come è stato riparato.

WinDbg e i dump: trasformare crash e hang in risposte

Standardizza i filtri Procmon
Crea una libreria/app per template di filtri Procmon e note di troubleshooting.

Quando qualcosa “semplicemente crasha”, l'artefatto più utile è spesso un file dump: un'istantanea della memoria più lo stato di esecuzione sufficiente per ricostruire cosa stava facendo il processo (o l'OS) al momento del fallimento. A differenza dei log, i dump non richiedono di prevedere il messaggio giusto: catturano la prova dopo il fatto.

Cosa sono i crash dump (e perché li vuoi)

  • Dump di crash in user mode registrano un singolo processo. Sono ideali quando un servizio muore ma la macchina resta su.
  • Dump kernel (a livello di sistema) sono usati per bugcheck (BSOD) e catturano stato del kernel, driver e thread del sistema.

I dump possono indicare un modulo specifico, un call path e il tipo di fallimento (access violation, heap corruption, deadlock, fault di driver), cose difficili da dedurre solo dai sintomi.

Nozioni base di WinDbg: simboli, stack e “cosa è fallito”

WinDbg trasforma un dump in una storia. L'essenziale:

  • Simboli che mappano indirizzi grezzi a nomi di funzione e info di linea. Senza simboli corretti, l'analisi diventa congettura.
  • Stack trace che mostrano la sequenza di chiamate che ha portato al crash o lo stato corrente di un thread “bloccato”.
  • L'obiettivo è identificare il componente fallito: il tuo codice, una DLL dipendente, un driver, un antivirus shim, lo stack grafico, ecc.

Un workflow tipico: apri il dump → carica i simboli → esegui un'analisi automatica → valida controllando gli stack principali e i moduli coinvolti.

Crash vs BSOD vs hang: non confondere le categorie

  • Bugcheck (BSOD): tutto il sistema si ferma. Aspettati dump kernel e lavoro su driver/causa radice.
  • Crash di app: un processo termina. Aspettati dump user mode e un codice di eccezione.
  • Hang: nulla crasha, ma il lavoro si ferma. Serve prova di cosa i thread stanno aspettando.

Gli hang richiedono prove: stack, wait e lock

"È bloccato" è un sintomo, non una diagnosi. Per gli hang, cattura un dump mentre l'app è non reattiva e ispeziona:

  • Stack dei thread per vedere cosa fa ciascuno.
  • Motivi di wait (I/O, RPC, mutex/critical section, rete).
  • Pattern di lock/contesa—spesso il thread UI "bloccato" aspetta un worker thread bloccato altrove.

Aspettative realistiche: auto-diagnosi vs escalation

Spesso puoi diagnosticare da solo problemi netti (crash ripetuti in un modulo, deadlock evidenti, forte correlazione a una DLL/driver specifico). Escala quando i dump implicano driver di terze parti/antivirus, componenti kernel o quando mancano simboli/sorgenti—allora potrebbe servire l'aiuto del vendor o di Microsoft per interpretare l'intera catena.

Pattern di failure comuni e come gli internals li spiegano

Molti problemi "misteriosi" su Windows ripetono gli stessi pattern. La differenza tra indovinare e risolvere è capire cosa fa l'OS—e il modello mentale Internals/Sysinternals ti aiuta a vederlo.

Memory leak: working set vs commit

Quando le persone dicono “l'app perde memoria”, spesso intendono una di due cose.

Working set è la RAM fisica attualmente usata dal processo. Può salire e scendere mentre Windows libera memoria sotto pressione.

Commit è la quantità di memoria virtuale che il sistema si è impegnato a supportare con RAM o page file. Se il commit continua a salire, hai un rischio reale di leak: alla fine raggiungi il commit limit e le allocazioni iniziano a fallire o l'host diventa instabile.

Un sintomo comune: Task Manager mostra “RAM disponibile”, ma la macchina rallenta—perché il vincolo è il commit, non la RAM libera.

Handle leak: un fallimento lento che sembra casuale

Un handle è un riferimento a un oggetto OS (file, chiave di registro, evento, section, ecc.). Se un servizio perde handle, può funzionare per ore o giorni e poi iniziare a fallire con errori strani (impossibile aprire file, creare thread, accettare connessioni) mentre il conteggio degli handle per processo cresce.

In Process Explorer, osserva tendenze nel conteggio degli handle nel tempo. Una pendenza in salita costante è un forte indizio che il servizio “si dimentica di chiudere” qualcosa.

Problemi disco/filesystem: latenza, retry, filter driver

I problemi di storage non si mostrano sempre come throughput alto; spesso appaiono come alta latenza e retry. In Process Monitor, cerca:

  • operazioni CreateFile/ReadFile ripetute
  • eventi I/O di lunga durata
  • molto rumore NAME NOT FOUND / PATH NOT FOUND (percorsi mal configurati)

Fai attenzione anche ai filter driver (AV, backup, DLP). Possono inserirsi nel path I/O e aggiungere ritardo o fallimenti senza che l'app faccia nulla di sbagliato.

Spike di CPU: un processo caldo vs contesa

Un singolo processo caldo è semplice: un eseguibile consuma CPU.

La contesa di sistema è più difficile: la CPU è alta perché molti thread sono runnable e lottano per lock, disco o memoria. Il pensiero internals ti spinge a chiedere: “La CPU sta facendo lavoro utile, o sta girare a vuoto perché bloccata altrove?”

Problemi di rete: chi possiede la connessione?

Quando ci sono timeout, mappa processo → connessione con TCPView o Process Explorer. Se la connessione è posseduta dal processo sbagliato, hai un colpevole concreto. Se è quello giusto, cerca pattern: retry SYN, connessioni lunghe inattive bloccate, o esplosioni di tentativi outbound che suggeriscono problemi DNS/firewall/proxy più che un'app down.

Un workflow pratico: Osserva → Cattura → Spiega → Correggi

Rendi i dump più facili da triageare
Crea un intake semplice per dump di crash/hang e checklist di triage.

Il lavoro di affidabilità diventa più facile quando ogni incidente segue lo stesso percorso. L'obiettivo non è “lanciare più strumenti”—è prendere decisioni migliori con prove coerenti.

1) Riproduci (o definisci il trigger)

Scrivi cosa significa “male” in una frase: “L'app si blocca per 30–60 secondi quando salvo un file grande” o “La CPU sale al 100% ogni 10 minuti.” Se puoi riprodurre, fallo; se non puoi, definisci il trigger (finestra temporale, carico, azione utente).

2) Osserva (leggero prima)

Prima di raccogliere dati pesanti, conferma il sintomo e lo scope:

  • È una macchina o molte?
  • Un processo o tutto l'host?
  • Problema di performance, crash o hang?

Qui check rapidi (Task Manager, Process Explorer, contatori base) ti aiutano a scegliere cosa catturare dopo.

3) Cattura (crea un buon fascicolo)

Cattura le prove come se le passassi a un collega che non era lì. Un buon case file solitamente include:

  • Timestamp (start/end, fuso orario, frequenza)
  • Versioni (build Windows, versione app, versioni driver)
  • Configurazione (feature flag, policy, variabili d'ambiente, tooling di sicurezza)
  • Trace (filtri Procmon, nome sessione ETW, durata)
  • Dump (hang/crash: full vs mini, quale processo, come è stato generato)

Mantieni le catture brevi e mirate. Un trace di 60 secondi che copre la finestra di errore vale più di 6 ore di capture che nessuno apre.

4) Spiega (trasforma i dati in una storia)

Trasduci ciò che hai raccolto in una narrativa semplice:

  • Cosa è cambiato? (nuova build, policy, driver, carico)
  • Cosa fa il sistema invece? (retry, contesa, I/O bloccato, timeout)
  • Qual è la causa probabile? (una o due ipotesi ordinate)

Se non riesci a spiegarlo in modo semplice, probabilmente ti serve una cattura più pulita o un'ipotesi più stretta.

5) Correggi, conferma e riduci MTTR la prossima volta

Applica la correzione più piccola e sicura, poi conferma con gli stessi passi di riproduzione e un confronto “prima vs dopo”.

Per ridurre MTTR, standardizza playbook e automatizza le parti noiose:

  • uno script/comando per avviare una trace, uno per fermare e zipparne i risultati
  • struttura di cartelle e naming coerente
  • checklist per cosa raccogliere per sintomo (crash vs hang vs slowdown)

Apprendimento post-incident: aggiungi il segnale mancante

Dopo la risoluzione, chiediti: “Quale segnale avrebbe reso evidente questo problema prima?” Aggiungi quel segnale—evento Sysmon, provider ETW, contatore di prestazione o un health check leggero—così il prossimo incidente sarà più breve e più calmo.

Renderlo permanente: correzioni più sicure e affidabilità a lungo termine

Lo scopo del lavoro sugli internals non è “vincere” una sessione di debug—è trasformare ciò che hai visto in cambiamenti che prevengono il ritorno dell'incidente.

Trasforma i risultati in azioni concrete

Gli strumenti internals di solito restringono il problema a poche leve. Mantieni esplicita la traduzione:

  • Cambio config: permessi account servizio, valore di registro, dimensione pool, cadenza di scheduled task.
  • Patch: aggiornamento cumulativo OS, update .NET o hotfix vendor che corrispondono allo stack o alla versione driver osservata.
  • Aggiornamento/rollback driver: se Procmon/ETW mostra stall attorno a driver di file/rete/filtri, tratta le versioni dei driver come dipendenze di prima classe.
  • Rollback: se la correzione è rischiosa, pianifica il revert rapido (pacchetto known-good, GPO precedente, bundle driver precedente).

Annota il “perché”: “Abbiamo cambiato X perché abbiamo osservato Y in Process Monitor / ETW / dump.” Quella frase previene la deriva della knowledge.

Guardrail: finestre di cambiamento, validazione, rollback

Adatta il processo di cambiamento al blast radius:

  • Usa una finestra di cambiamento con traffico ridotto se possibile.
  • Definisci passi di validazione (quali contatori, event ID o user journey devono migliorare).
  • Prepara un piano di rollback chiaro con un owner e un limite di tempo (“Se gli errori non calano in 15 minuti, revert”).

Pattern di affidabilità riutilizzabili

Anche quando la causa è specifica, la durabilità spesso deriva da pattern riutilizzabili:

  • Timeout per prevenire starvation di thread e catene di dipendenza bloccate.
  • Rate limiting/backoff per fermare storm di retry.
  • Opzioni di recovery del servizio (azioni di restart, periodo di reset fallimento) per fault transitori.
  • Health check che rilevino hang, non solo crash.

Igiene dei dati per capture e telemetria

Conserva ciò che serve e proteggi ciò che non dovresti raccogliere.

Limita i filtri Procmon ai processi sospetti, anonimizza percorsi/username quando condividi, imposta retention per ETW/Sysmon e evita capture di rete pesanti a meno che non siano necessarie.

Operationalizzare i playbook (dove Koder.ai può aiutare)

Quando hai un workflow ripetibile, il passo successivo è impacchettarlo perché altri possano eseguirlo in modo coerente. Qui una piattaforma come Koder.ai può essere utile: puoi trasformare la checklist dell'incidente in una piccola web app interna (UI React, backend Go con PostgreSQL) che guida i responder attraverso “observe → capture → explain”, conserva timestamp e artifact, e standardizza naming e struttura dei case file.

Poiché Koder.ai costruisce app via chat con un'architettura agent-based, i team possono iterare rapidamente—aggiungendo un pulsante “start ETW session”, una libreria di template per filtri Procmon, snapshot/rollback dei cambiamenti o un generatore di runbook esportabile—senza ricostruire tutto in una pipeline dev tradizionale. Se condividi pratiche interne di affidabilità, Koder.ai supporta anche l'export del codice e piani da free a enterprise, così puoi iniziare in piccolo e scalare la governance più tardi.

Un piccolo piano di pratica settimanale

Una volta a settimana, scegli uno strumento e un esercizio di 15 minuti: traccia un avvio lento con Procmon, ispeziona l'albero di servizi in Process Explorer, rivedi il volume eventi di Sysmon o prendi un dump di crash e identifica il modulo fallito. Piccole ripetizioni costruiscono la memoria muscolare che rende gli incidenti reali più rapidi—e più sicuri.

Domande frequenti

Perché Mark Russinovich è ancora importante per le operazioni Windows oggi?

Mark Russinovich ha reso popolare un approccio "evidence-first" alla risoluzione dei problemi su Windows e ha pubblicato (o influenzato) strumenti che rendono il sistema osservabile nella pratica.

Anche se non hai mai letto Windows Internals, probabilmente fai affidamento su workflow modellati da Sysinternals, ETW e dall'analisi dei dump per abbreviare gli incidenti e rendere le correzioni ripetibili.

Cosa significa “osservabilità” nel contesto delle operazioni Windows?

L'osservabilità è la capacità di rispondere a "cosa sta succedendo adesso?" a partire dai segnali del sistema.

Su Windows, questo tipicamente significa combinare:

  • i log eventi per eventi discreti di sistema/app
  • le metriche (contatori Prestazioni) per impatto e saturazione
  • le trace (ETW) per causalità ad alta fedeltà e timeline
Come riduce il tempo medio di risoluzione (MTTR) la conoscenza degli internals di Windows?

La conoscenza degli internals ti aiuta a trasformare sintomi vaghi in ipotesi verificabili.

Per esempio, "il server è lento" diventa un insieme più piccolo di meccanismi da validare: contesa CPU vs pressione di paging vs latenza I/O vs overhead di driver/filtri. Questo accelera il triage e ti aiuta a raccogliere le prove giuste prima che il problema scompaia.

Quando dovrei usare Process Explorer invece del Task Manager?

Usa Process Explorer quando vuoi identificare chi è responsabile.

È ideale per risposte rapide come:

  • quale processo consuma CPU/memoria
  • relazioni parent/child (chi lo ha avviato)
  • hotspot e wait a livello di thread
  • quali DLL/handle il processo ha aperto
Per quali problemi è più indicato Process Monitor (Procmon)?

Usa Process Monitor quando ti serve la traccia delle attività su file, registry e operazioni di processo/thread.

Esempi pratici:

  • trovare "NAME NOT FOUND" che blocca l'avvio di un'app
  • dimostrare che un access denied è problema di permessi/percorso
  • identificare chi sta martellando il disco e quale percorso viene toccato
Come evito il rumore in Procmon e ottengo comunque prove utili?

Filtra con decisione e cattura solo la finestra del problema.

Un buon workflow iniziale:

  • filtra per Process Name o PID prima di tutto
  • aggiungi regole Include per percorsi/chiavi specifiche
  • cattura per 30–120 secondi intorno al sintomo, poi ferma

Una traccia più piccola che puoi analizzare vale più di una enorme cattura che nessuno riesce ad aprire.

In che modo Autoruns aiuta con problemi di affidabilità e boot/logon?

Autoruns risponde a “cosa si avvia automaticamente?”—servizi, scheduled task, driver, shell extension e altro.

È particolarmente utile per:

  • avvii/logon lenti
  • spike di CPU intermittenti dopo il login
  • processi di background misteriosi

Concentrati su voci non firmate, appena aggiunte o che non riescono a caricare, e disabilita un elemento alla volta prendendo nota.

Quando dovrei passare dai log/metriche al tracing ETW?

ETW (Event Tracing for Windows) è il "flight recorder" integrato di Windows.

Usalo quando log e metriche ti dicono che qualcosa non va ma non spiegano perché—per esempio, stall dovuti a latenza I/O, ritardi di scheduling, comportamento di driver o timeout di dipendenze. Mantieni le catture brevi, mirate e correlate temporalmente al sintomo segnalato.

In che modo Sysmon migliora le indagini di affidabilità (non solo la sicurezza)?

Sysmon aggiunge telemetria ad alto contesto (process parent/child, command line, hash, driver load) che aiuta a rispondere a "cosa è cambiato?"

Per l'affidabilità è utile per confermare:

  • nuovi processi helper o scheduled task prima di spike
  • caricamenti di driver correlati a nuovi hang/bugcheck
  • cambiamenti inattesi di binari/percorso dopo patch

Parti con una configurazione minima e affina include/exclude per controllare il volume degli eventi.

Qual è la differenza pratica nell'indagare un crash, un BSOD e un hang con WinDbg?

Un dump è spesso l'artefatto più prezioso per crash e hang perché cattura lo stato di esecuzione dopo il fatto.

  • Crash di app: cattura dump in user mode; analizza codici di eccezione e stack.
  • BSOD: cattura dump kernel; concentra l'attenzione su driver e stato del kernel.
  • Hang: cattura un dump mentre è bloccato; ispeziona stack dei thread, motivi di wait e contese.

WinDbg trasforma i dump in risposte, ma i simboli corretti sono essenziali per avere stack e identificazione dei moduli significativi.

Related posts