Siapa pun yang menjalankan pekerjaan di penjadwal tugas Windows cepat atau lambat akan menemukan perbedaan waktu proses yang tidak dapat dijelaskan. Skrip PHP yang berjalan dalam 5 menit pada baris perintah tiba-tiba membutuhkan waktu 20 menit ketika dijalankan melalui Windows Task Scheduler. Pengguna yang sama, hak yang sama, kode yang sama – empat kali waktu eksekusi. Apa yang terjadi di sana?
Setelah jam kerja Men-debug, Sesi pemantauan proses dan perbandingan konfigurasi yang tak terhitung jumlahnya, solusinya ternyata sangat sederhana: penjadwalan tugas Windows menetapkan prioritas proses yang lebih rendah secara default. Nilai default untuk tugas di Penjadwal Tugas adalah 7 (Dibawah Normal), tidak 4-6 (Normal), seperti yang Anda harapkan. Perbedaan yang tampaknya kecil ini dapat menyebabkan hilangnya kinerja secara besar-besaran dalam operasi intensif I/O.
Tingkat prioritas Windows secara rinci adalah:
| Nilai | Prioritas | Deskripsi |
|---|---|---|
| 0 | Waktu nyata | Prioritas tertinggi (hati-hati!) |
| 1 | Tinggi | Prioritas tinggi |
| 2-3 | Di Atas Normal | Tentang Normal |
| 4-6 | Normal | Standar untuk proses interaktif |
| 7 | Di Bawah Normal | DEFAULT di Penjadwal Tugas |
| 8-9 | Di Bawah Normal | Bahkan lebih rendah |
| 10 | Menganggur | Prioritas terendah |
Masalah prioritas dalam penjadwalan tugas bersifat multifaset: Saat Anda mengekspor tugas dan melihat XML-nya, Anda sering kali akan menemukan TIDAK Pengaturan prioritas. Windows kemudian akan diam-diam menggunakan nilai default 7. GUI menampilkan nilai ini selama ekspor, tetapi tidak disimpan secara eksplisit dalam tugas. Prioritas yang lebih rendah tidak hanya menghasilkan waktu CPU yang lebih singkat, tetapi juga:
- Operasi I/O disk yang dibatasi
- Prioritas jaringan lebih rendah
- Caching sistem file yang buruk
- Penundaan dalam akses basis data
Meskipun Anda menggunakan pengguna yang sama dan mengaktifkan "Jalankan dengan hak istimewa tertinggi", tugas tersebut tetap berjalan di lingkungan desktop/stasiun Windows yang berbeda dengan prioritas yang berbeda. Untuk mengidentifikasi masalah ini, Anda dapat menggunakan PowerShell untuk menampilkan daftar semua tugas beserta prioritasnya.:
38b7fa6c77dc344401485cd338ea4128
Hampir semua tugas saya berjalan dengan prioritas 7. Kami sekarang secara khusus mengoreksi prioritas beberapa tugas sekaligus:
38b7fa6c77dc344401485cd338ea4128
Setelah menetapkan prioritas ke 4 (Biasanya) skrip PHP saya berjalan kembali dalam waktu 300 detik yang diharapkan. Jika Anda telah mengonfigurasi tugas dengan akun pengguna tertentu, Anda cukup memasukkannya di baris 10 sebagai berikut:
38b7fa6c77dc344401485cd338ea4128