Chiunque esegua attività nell'Utilità di pianificazione di Windows, prima o poi incontrerà inspiegabili differenze di runtime. Uno script PHP che viene eseguito in 5 minuti dalla riga di comando, improvvisamente ne impiega 20 se eseguito tramite l'Utilità di pianificazione di Windows. Stesso utente, stesse autorizzazioni, stesso codice: tempo di esecuzione quadruplicato. Cosa stava succedendo?
Dopo ore di debug, sessioni di Process Monitor e innumerevoli confronti di configurazioni, la soluzione è stata spaventosamente semplice: l'Utilità di pianificazione di Windows imposta una priorità di processo inferiore per impostazione predefinita. Il valore predefinito per le attività nell'Utilità di pianificazione è 7 (Al di sotto della norma), non 4-6 (Normale) come previsto. Questa differenza apparentemente piccola può portare a un notevole degrado delle prestazioni nelle operazioni che richiedono un elevato utilizzo di I/O.
I livelli di priorità di Windows in dettaglio sono:
| Valore | Priorità | Descrizione |
|---|---|---|
| 0 | In tempo reale | Massima priorità (attenzione!) |
| 1 | Alto | Alta priorità |
| 2-3 | Sopra la norma | Informazioni su Normal |
| 4-6 | Normale | Standard per processi interattivi |
| 7 | Al di sotto della norma | DEFAULT in Utilità di pianificazione |
| 8-9 | Al di sotto della norma | Ancora più in basso |
| 10 | Oziare | Priorità più bassa |
Il problema con la priorità nella pianificazione delle attività è multistrato: quando si esporta un'attività e si guarda l'XML, spesso si NO Impostazione della priorità. Windows utilizzerà quindi silenziosamente il valore predefinito 7. L'interfaccia grafica visualizza questo valore durante l'esportazione, ma non viene memorizzato esplicitamente nell'attività. La priorità inferiore non solo comporta un minor tempo di CPU, ma anche:
- Operazioni di I/O su disco limitate
- Priorità di rete inferiore
- Caching del file system scadente
- Ritardi nell'accesso al database
Anche se si utilizza lo stesso utente e si abilita "Esegui con i privilegi più elevati", l'attività viene eseguita in un ambiente desktop/stazione Windows diverso con priorità diverse. Per identificare il problema, è possibile utilizzare PowerShell per elencare tutte le attività con le relative priorità effettive.:
38b7fa6c77dc344401485cd338ea4128
Quasi tutti i miei compiti sono stati eseguiti con priorità 7. Ora correggiamo specificamente la priorità di più attività contemporaneamente:
38b7fa6c77dc344401485cd338ea4128
Dopo aver impostato la priorità su 4 (Normalmente) il mio script PHP è stato eseguito nuovamente nei 300 secondi previsti. Se hai configurato attività con un account utente specifico, puoi anche specificarlo facilmente alla riga 10 come segue.:
38b7fa6c77dc344401485cd338ea4128