Chiunque esegua lavori nell'utilità di pianificazione di Windows prima o poi si imbatterà in differenze inspiegabili nel tempo di esecuzione. Uno script PHP che viene eseguito in 5 minuti sulla riga di comando impiega improvvisamente 20 minuti se eseguito tramite l'Utilità di pianificazione di Windows. Stesso utente, stessi diritti, stesso codice: quattro volte il tempo di esecuzione. Cosa stava succedendo lì?
Dopo ore Debug, Sessioni di monitoraggio dei processi e innumerevoli confronti di configurazione, la soluzione era sorprendentemente semplice: la pianificazione delle attività 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 ci si aspetterebbe. Questa differenza apparentemente piccola può portare a enormi perdite di prestazioni nelle operazioni ad uso intensivo 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 della priorità nella pianificazione delle attività è multiforme: quando si esporta un'attività e si guarda l'XML, spesso si scopre 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 Il mio script PHP è stato eseguito (normalmente) di nuovo nei 300 secondi previsti. Se hai configurato attività con un account utente specifico, puoi semplicemente inserirlo nella riga 10 come segue:
38b7fa6c77dc344401485cd338ea4128