Bất kỳ ai chạy tác vụ trong Windows Task Scheduler sớm muộn gì cũng sẽ gặp phải sự khác biệt khó hiểu về thời gian chạy. Một tập lệnh PHP chạy trong 5 phút trên dòng lệnh bỗng nhiên mất đến 20 phút khi được thực thi qua Windows Task Scheduler. Cùng một người dùng, cùng quyền, cùng mã - thời gian thực thi gấp bốn lần. Chuyện gì đang xảy ra vậy?
Sau nhiều giờ gỡ lỗi, các phiên Process Monitor và vô số lần so sánh cấu hình, giải pháp lại đơn giản đến mức đáng sợ: Windows Task Scheduler mặc định đặt mức ưu tiên quy trình thấp hơn. Giá trị mặc định cho các tác vụ trong Task Scheduler là 7 (Dưới mức bình thường), không 4-6 (Bình thường) như mong đợi. Sự khác biệt nhỏ này có vẻ như có thể dẫn đến giảm hiệu suất nghiêm trọng trong các hoạt động I/O chuyên sâu.
Các mức độ ưu tiên của Windows được trình bày chi tiết như sau::
| Giá trị | Sự ưu tiên | Sự miêu tả |
|---|---|---|
| 0 | Thời gian thực | Mức độ ưu tiên cao nhất (thận trọng!) |
| 1 | Cao | Ưu tiên cao |
| 2-3 | Trên mức bình thường | Về Bình thường |
| 4-6 | Bình thường | Tiêu chuẩn cho các quy trình tương tác |
| 7 | Dưới mức bình thường | MẶC ĐỊNH trong Trình lập lịch tác vụ |
| 8-9 | Dưới mức bình thường | Thậm chí còn thấp hơn |
| 10 | Nhàn rỗi | Mức độ ưu tiên thấp nhất |
Vấn đề với mức độ ưu tiên trong lập lịch tác vụ là nhiều lớp: Khi bạn xuất một tác vụ và xem XML, bạn sẽ thường KHÔNG Thiết lập mức độ ưu tiên. Windows sau đó sẽ âm thầm sử dụng giá trị mặc định 7. Giao diện người dùng đồ họa (GUI) hiển thị giá trị này trong quá trình xuất, nhưng nó không được lưu trữ rõ ràng trong tác vụ. Mức độ ưu tiên thấp hơn không chỉ dẫn đến thời gian CPU ít hơn mà còn:
- Hoạt động I/O đĩa bị hạn chế
- Ưu tiên mạng thấp hơn
- Bộ nhớ đệm hệ thống tệp kém
- Sự chậm trễ trong việc truy cập cơ sở dữ liệu
Ngay cả khi bạn sử dụng cùng một người dùng và bật "Chạy với đặc quyền cao nhất", tác vụ vẫn chạy trong một môi trường máy trạm/máy tính để bàn Windows khác với các mức độ ưu tiên khác nhau. Để xác định vấn đề, bạn có thể sử dụng PowerShell để liệt kê tất cả các tác vụ theo mức độ ưu tiên thực tế của chúng.:
38b7fa6c77dc344401485cd338ea4128
Hầu như tất cả các nhiệm vụ của tôi đều được ưu tiên 7. Bây giờ chúng tôi đặc biệt sửa mức độ ưu tiên của nhiều tác vụ cùng một lúc:
38b7fa6c77dc344401485cd338ea4128
Sau khi thiết lập mức độ ưu tiên 4 (Thông thường) tập lệnh PHP của tôi chạy lại sau 300 giây dự kiến. Nếu bạn đã cấu hình tác vụ với một tài khoản người dùng cụ thể, bạn cũng có thể dễ dàng chỉ định điều này ở dòng 10 như sau.:
38b7fa6c77dc344401485cd338ea4128