Vấn đề: Khi server bỗng dưng “đứng hình” vì task nặng
Bạn đã bao giờ thấy server đang chạy mượt mà bỗng dưng chậm hẳn vào một khung giờ cố định chưa? Thường là lúc cron job backup hoặc nén dữ liệu bắt đầu hoạt động, khiến trang web bị timeout liên tục. Mình từng gặp ca khó với con VPS WordPress, cứ 2h sáng là nhận cảnh báo downtime từ uptime monitor dù lúc đó gần như không có khách truy cập.
Kiểm tra kỹ mới thấy Load Average vọt từ 0.5 lên tận 10.0. Nguyên nhân là do script backup đang ngốn sạch CPU và làm nghẽn băng thông ổ cứng (I/O). Thực tế, file backup 10GB đó chạy trong 30 phút cũng chẳng sao, không nhất thiết phải vắt kiệt sức server để xong trong 5 phút. Đây là lúc bộ đôi nice và ionice phát huy tác dụng để điều phối tài nguyên thông minh hơn.
Nice Value: Khi tiến trình biết “nhường nhịn” CPU
Mỗi tiến trình (process) trên Linux đều có một chỉ số gọi là nice value. Bạn cứ tưởng tượng CPU là một con đường, và nice value sẽ quyết định xe nào được ưu tiên đi trước, xe nào phải chờ.
- Dải giá trị: Chạy từ -20 (ưu tiên cao nhất) đến 19 (ưu tiên thấp nhất).
- Mặc định: Hầu hết các ứng dụng khi mở lên sẽ có giá trị là 0.
- Cơ chế: Số càng cao thì tiến trình càng “tử tế” (nice), sẵn sàng nhường CPU cho kẻ khác. Ngược lại, số âm càng lớn thì tiến trình càng “hung hăng” và chiếm quyền ưu tiên.
Nói dễ hiểu: Nếu bạn đặt một task có độ nice là 19, nó sẽ hoạt động theo kiểu: “Mọi người cứ dùng CPU đi, khi nào rảnh thì cho tôi xin một ít”.
Cách sử dụng lệnh nice
Muốn chạy một script nén file với mức ưu tiên thấp để không ảnh hưởng đến web, bạn dùng cú pháp:
nice -n 15 ./backup_db.sh
Trường hợp cần ưu tiên cực cao cho một ứng dụng xử lý thanh toán (cần quyền root):
sudo nice -n -10 ./payment_gateway
Điều chỉnh mức ưu tiên cho tiến trình đang chạy (renice)
Nếu thấy một ứng dụng đang ngốn CPU quá mức mà không muốn tắt đi bật lại, hãy dùng renice. Đầu tiên, gõ top để lấy PID (mã định danh), sau đó thực hiện:
# Ép tiến trình có PID 1234 xuống mức ưu tiên thấp nhất (19)
renice -n 19 -p 1234
Kiểm soát ổ cứng với ionice
Dù CPU có mạnh đến mấy nhưng nếu ổ cứng bị nghẽn (I/O Wait tăng vọt lên 40-50%), hệ thống vẫn sẽ lag như rùa bò. ionice giúp bạn phân cấp quyền truy cập đĩa cứng, cực kỳ hữu ích khi quét virus hoặc nén file nặng.
ionice chia làm 3 nhóm (Classes) chính:
- Idle (Class 3): Chỉ dùng đĩa cứng khi không có bất kỳ ai khác cần đến. Đây là “vùng xanh” cho các script backup.
- Best-effort (Class 2): Chế độ mặc định. Bạn có thể chỉnh mức từ 0 (mạnh) đến 7 (yếu) trong nhóm này.
- Real-time (Class 1): Ưu tiên truy cập đĩa ngay lập tức. Hãy cực kỳ cẩn thận vì nó có thể khiến các tiến trình khác bị đóng băng hoàn toàn.
Thực hành với ionice
Để chạy lệnh nén folder /var/www mà không làm ảnh hưởng đến tốc độ đọc ghi của Database:
ionice -c 3 tar -czf site_backup.tar.gz /var/www
Công thức kết hợp: Giải pháp tối ưu triệt để
Trong thực tế, mình luôn kết hợp cả hai khi xử lý các tác vụ nền. Ví dụ, mình có một script Python để tối ưu hóa hàng nghìn ảnh cũ. Nếu để chạy tự nhiên, CPU sẽ nhảy lên 100% và ổ cứng sẽ kêu gào liên tục.
Cách giải quyết văn minh nhất:
nice -n 19 ionice -c 3 python3 optimize_images.py
Lúc này, script xử lý ảnh sẽ trở thành một “công dân gương mẫu”: vừa biết nhường CPU, vừa không tranh giành ổ cứng với các dịch vụ quan trọng như Nginx hay MySQL.
Kinh nghiệm thực tế và mẹo nhỏ
Sau nhiều năm quản lý VPS, mình rút ra một bài học: Đừng hạ ưu tiên quá thấp cho những task bắt buộc phải xong sớm. Nếu bạn đặt nice 19 và ionice class 3 cho một task backup vào lúc server đang bận, có thể nó sẽ mất cả ngày mới xong thay vì chỉ 1 tiếng.
Vài lưu ý nhỏ cho anh em quản trị:
- Dùng htop cho nhàn: Cột NI trong
htophiển thị Nice value rất rõ. Bạn có thể nhấn F7/F8 để tăng giảm ưu tiên ngay tại giao diện đó. - Quyền hạn: User thường chỉ có thể “nhường” (tăng số nice). Chỉ root mới có quyền “giành” (giảm số nice xuống mức âm).
- Cấu hình Crontab: Đừng bao giờ gọi lệnh backup trực tiếp. Hãy kẹp thêm nice và ionice vào trước. Ví dụ:
0 2 * * * nice -n 15 ionice -c 3 /usr/local/bin/daily_backup.sh - Tránh xa Real-time: Đừng bao giờ dùng
ionice -c 1cho các dịch vụ thông thường nếu bạn không muốn server bị treo cứng một cách khó hiểu.
Lời kết
Quản trị server giỏi không chỉ là cài xong cho nó chạy, mà là biết điều phối tài nguyên sao cho hiệu quả nhất. Việc nắm vững nice và ionice giúp bạn nắm thế chủ động, bảo vệ các dịch vụ cốt lõi khỏi những tác vụ “tham lam”. Thử áp dụng ngay vào các script trên server của bạn, hệ thống sẽ ổn định hơn đáng kể đấy!

