Bất kỳ ai chạy các công việc trong bộ lập lịch tác vụ của Windows sớm hay muộn cũng sẽ gặp phải những khác biệt không thể giải thích được trong thời gian chạy. Một tập lệnh PHP chạy trong 5 phút trên dòng lệnh đột nhiên mất 20 phút khi chạy qua Windows Task Scheduler. Cùng một người dùng, cùng một quyền, cùng một mã – gấp bốn lần thời gian thực hiện. Chuyện gì đang xảy ra ở đó thế?
Sau giờ làm việc Gỡ lỗi, Các phiên giám sát quy trình và vô số so sánh cấu hình, giải pháp cực kỳ đơn giản: Lập lịch tác vụ của Windows đặt mức độ ưu tiên quy trình thấp hơn theo mặc định. Giá trị mặc định cho các tác vụ trong Trình lập lịch tác vụ là 7 (Dưới mức bình thường), không 4-6 (Bình thường), như bạn mong đợi. Sự khác biệt dường như nhỏ này có thể dẫn đến tổn thất lớn về hiệu suất trong các hoạt động sử dụng nhiều I/O.
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ề thứ tự ưu tiên trong lập lịch tác vụ rất đa diện: Khi bạn xuất một tác vụ và xem tệp XML, bạn thường sẽ thấy 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 Tập lệnh PHP của tôi đã chạy lại (bình thường) sau 300 giây dự kiến. Nếu bạn đã định cấu hình các tác vụ với một tài khoản người dùng cụ thể, bạn chỉ cần nhập thông tin này vào dòng 10 như sau:
38b7fa6c77dc344401485cd338ea4128