Lệnh nice trong Linux

Giới thiệu

Trong lab này, chúng ta sẽ khám phá lệnh nice của Linux, cho phép bạn điều chỉnh độ ưu tiên của một tiến trình. Chúng ta sẽ bắt đầu bằng cách hiểu khái niệm về độ ưu tiên của tiến trình và cách lệnh nice hoạt động, sau đó chuyển sang các ví dụ thực tế về việc sử dụng nice để quản lý lập lịch tiến trình. Lab này bao gồm kiểm tra giá trị niceness hiện tại của một tiến trình, chạy các lệnh với các giá trị niceness khác nhau và điều chỉnh độ ưu tiên của các tiến trình đang chạy. Lab này cung cấp một cách tiếp cận thực tế để hiểu và sử dụng lệnh nice để quản lý tiến trình hiệu quả trong môi trường Linux.

Tìm hiểu lệnh nice

Trong bước này, chúng ta sẽ tìm hiểu về lệnh nice trong Linux, cho phép bạn điều chỉnh độ ưu tiên của một tiến trình. Lệnh nice được sử dụng để đặt giá trị niceness của một tiến trình, giá trị này xác định độ ưu tiên lập lịch của tiến trình đó.

Giá trị niceness nằm trong khoảng từ -20 đến 19, với -20 là độ ưu tiên cao nhất và 19 là độ ưu tiên thấp nhất. Giá trị niceness mặc định cho một tiến trình mới là 0.

Hãy bắt đầu bằng cách kiểm tra giá trị niceness hiện tại của một tiến trình:

## Check the niceness value of the current shell process
nice -n 0 echo $PPID

Ví dụ đầu ra:

22456

Đầu ra hiển thị Process ID (PID) của tiến trình shell hiện tại, có giá trị niceness là 0.

Bây giờ, hãy chạy một lệnh với một giá trị niceness khác:

## Run a command with a niceness value of 5
nice -n 5 sleep 60 &

Trong ví dụ này, chúng ta đã sử dụng lệnh nice để chạy lệnh sleep 60 với giá trị niceness là 5. Ký tự & ở cuối lệnh đặt tiến trình vào nền.

Bạn có thể xác minh giá trị niceness của tiến trình sleep bằng lệnh ps:

ps -p $(pgrep sleep) -o pid,ni

Ví dụ đầu ra:

  PID   NI
22457   5

Đầu ra hiển thị rằng tiến trình sleep có giá trị niceness là 5.

Điều chỉnh độ ưu tiên của tiến trình bằng nice

Trong bước này, chúng ta sẽ tìm hiểu cách điều chỉnh độ ưu tiên của một tiến trình bằng lệnh nice.

Đầu tiên, hãy bắt đầu một tiến trình mới với độ ưu tiên cao hơn (giá trị niceness thấp hơn):

## Start a process with a niceness value of -5
nice -n -5 sleep 120 &

Trong ví dụ này, chúng ta đã sử dụng lệnh nice để bắt đầu lệnh sleep 120 với giá trị niceness là -5, điều này mang lại cho tiến trình độ ưu tiên cao hơn.

Bạn có thể xác minh giá trị niceness của tiến trình sleep bằng lệnh ps:

ps -p $(pgrep sleep) -o pid,ni

Ví dụ đầu ra:

  PID   NI
22458  -5

Đầu ra hiển thị rằng tiến trình sleep có giá trị niceness là -5.

Bây giờ, hãy bắt đầu một tiến trình khác với độ ưu tiên thấp hơn (giá trị niceness cao hơn):

## Start a process with a niceness value of 10
nice -n 10 sleep 120 &

Trong ví dụ này, chúng ta đã sử dụng lệnh nice để bắt đầu lệnh sleep 120 với giá trị niceness là 10, điều này mang lại cho tiến trình độ ưu tiên thấp hơn.

Bạn có thể xác minh giá trị niceness của tiến trình sleep bằng lệnh ps:

ps -p $(pgrep sleep) -o pid,ni

Ví dụ đầu ra:

  PID   NI
22459  10

Đầu ra hiển thị rằng tiến trình sleep có giá trị niceness là 10.

Để thay đổi giá trị niceness của một tiến trình hiện có, bạn có thể sử dụng lệnh renice:

## Change the niceness value of the first sleep process to 0
renice -n 0 -p $(pgrep sleep | head -n 1)

Bạn có thể xác minh giá trị niceness của tiến trình sleep bằng lệnh ps:

ps -p $(pgrep sleep) -o pid,ni

Ví dụ đầu ra:

  PID   NI
22458   0
22459  10

Đầu ra hiển thị rằng tiến trình sleep đầu tiên hiện có giá trị niceness là 0, trong khi tiến trình sleep thứ hai vẫn có giá trị niceness là 10.

Các ví dụ thực tế về sử dụng nice

Trong bước cuối cùng này, chúng ta sẽ khám phá một số ví dụ thực tế về việc sử dụng lệnh nice.

Ưu tiên một tác vụ tốn nhiều CPU

Hãy tưởng tượng bạn có một tác vụ tốn nhiều CPU mà bạn muốn chạy ở chế độ nền mà không ảnh hưởng đến hiệu suất hệ thống của bạn. Bạn có thể sử dụng lệnh nice để giảm độ ưu tiên của tác vụ này:

## Run a CPU-intensive task with a niceness value of 10
nice -n 10 python3 cpu_intensive.py &

Trong ví dụ này, chúng ta đang chạy một script Python có tên là cpu_intensive.py với giá trị niceness là 10, có nghĩa là nó sẽ có độ ưu tiên thấp hơn các tiến trình khác trên hệ thống.

Ưu tiên một tác vụ I/O-bound

Nếu bạn có một tác vụ I/O-bound, chẳng hạn như truyền tệp hoặc thao tác sao lưu, bạn có thể sử dụng lệnh nice để tăng độ ưu tiên của tác vụ này:

## Run an I/O-bound task with a niceness value of -5
nice -n -5 rsync -aAXv /source /destination &

Trong ví dụ này, chúng ta đang sử dụng lệnh rsync để thực hiện truyền tệp với giá trị niceness là -5, có nghĩa là nó sẽ có độ ưu tiên cao hơn các tiến trình khác trên hệ thống.

Ưu tiên một tác vụ nền

Nếu bạn có một tác vụ nền mà bạn muốn chạy mà không ảnh hưởng đến hiệu suất hệ thống của bạn, bạn có thể sử dụng lệnh nice để giảm độ ưu tiên của tác vụ này:

## Run a background task with a niceness value of 5
nice -n 5 ./background_script.sh &

Trong ví dụ này, chúng ta đang chạy một script có tên là background_script.sh với giá trị niceness là 5, có nghĩa là nó sẽ có độ ưu tiên thấp hơn các tiến trình khác trên hệ thống.

Tóm tắt

Trong lab này, chúng ta đã tìm hiểu về lệnh nice trong Linux, cho phép chúng ta điều chỉnh độ ưu tiên của một tiến trình. Chúng ta bắt đầu bằng cách hiểu lệnh nice và cách nó đặt giá trị niceness của một tiến trình, giá trị này xác định độ ưu tiên lập lịch của nó. Sau đó, chúng ta đã thực hành điều chỉnh độ ưu tiên của các tiến trình bằng cách chạy các lệnh với các giá trị niceness khác nhau. Bằng cách sử dụng lệnh nice, chúng ta có thể kiểm soát độ ưu tiên tương đối của các tiến trình đang chạy trên một hệ thống, điều này có thể hữu ích để tối ưu hóa hiệu suất hệ thống hoặc đảm bảo các tác vụ quan trọng có các tài nguyên cần thiết.

400+ câu lệnh phổ biến trong Linux