Lệnh cpulimit được thiết kế để hạn chế việc sử dụng CPU của một quy trình cụ thể trên Linux, đảm bảo rằng nó không vượt quá ngưỡng đã xác định. Điều này có thể đặc biệt hữu ích để quản lý tài nguyên hệ thống và ngăn chặn một quy trình duy nhất chiếm dụng thời gian CPU, điều này có thể làm giảm hiệu suất chung của hệ thống. Bằng cách chỉ định giới hạn sử dụng CPU mong muốn dưới dạng phần trăm, người dùng có thể áp dụng các ràng buộc cho các quy trình đang chạy hoặc khởi tạo các quy trình mới theo mức tiêu thụ CPU được kiểm soát. Công cụ gửi tín hiệu SIGSTOP và SIGCONT đến quy trình mục tiêu, tạm dừng và tiếp tục chúng để duy trì giới hạn sử dụng đã đặt.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22550%22%20height=%22143%22%3E%3C/svg%3E
Sau đó, chúng ta sẽ kiểm tra mức sử dụng CPU bằng lệnh:
Như chúng ta có thể thấy, mức sử dụng CPU đã tăng lên 100%. Bây giờ, chúng ta sẽ sử dụng cpulimit để giới hạn mức sử dụng CPU. Chúng ta có thể đưa tiến trình này lên phía trước bằng lệnh fgvà hủy nó bằng tổ hợp phím CTRL+C
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22550%22%20height=%22171%22%3E%3C/svg%3E
Bây giờ chúng ta có thể kiểm tra cpulimit để xem nó có thực hiện đúng như mong đợi không. Chúng ta hãy kiểm tra nó như sau:
root@server1:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
root@server1:~# Đã phát hiện tiến trình 1853
[1]+ Xong cpulimit -l 30 dd if=/dev/zero of=/dev/null
root@server1:~#
Bây giờ chúng ta sẽ kiểm tra mức sử dụng CPU với top lệnh:
top - 11:30:54 hoạt động 55 phút, 1 người dùng, tải trung bình: 0,20, 0,58, 1,34
Nhiệm vụ: tổng cộng 250, 2 đang chạy, 247 đang ngủ, 1 đã dừng, 0 zombie
%Cpu(s): 4,5 us, 4,1 sy, 0,0 ni, 91,4 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: tổng cộng 1010540, Đã sử dụng 271944, 738596 trống, 21816 bộ đệm
Hoán đổi KiB: Tổng cộng 1048572, đã sử dụng 0, 1048572 trống. 158212 bộ nhớ đệm Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1853 root 20 0 7224 612 520 T 33.8 0.1 0:35.53 dd
1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.37 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
Bây giờ bạn có thể thấy mức sử dụng CPU đã giảm từ 100% xuống 33,8%, gần 30%. Vì vậy, chúng tôi đã kiểm tra thành công tiện ích cpulimit, có thể giới hạn mức sử dụng CPU trong bản phân phối Ubuntu lõi đơn.
Trong trường hợp của tôi, số lõi CPU là 4.
Bây giờ chúng ta sẽ tiến hành kiểm tra mức sử dụng CPU mà không có cpulimit trong cả 4 lõi cho ứng dụng như sau:
Nó sẽ chạy lệnh sử dụng tất cả các lõi và tạo ra đầu ra như sau:
root@server1:~# for j in `seq 1 4`; thực hiện dd if=/dev/zero of=/dev/null & xong
[1] 1263
[2] 1264
[3] 1265
[4] 1266
root@server1:~#
Bây giờ hãy kiểm tra mức sử dụng CPU bằng lệnh top:
top - 11:47:45 hoạt động 4 phút, 1 người dùng, tải trung bình: 3,63, 1,53, 0,57
Nhiệm vụ: tổng cộng 290, 5 đang chạy, 285 đang ngủ, 0 đã dừng, 0 zombie
%Cpu0 : 48,3 us, 51,3 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu1: 47,8 us, 52,2 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu2: 53,3 us, 46,4 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu3: 52,0 us, 48,0 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: tổng cộng 1010540, 209712 đã sử dụng, 800828 trống, 20276 bộ đệm
Hoán đổi KiB: tổng cộng 1048572, 0 đã sử dụng, 1048572 trống. 93632 bộ nhớ đệm
PID NGƯỜI DÙNG PR NI VIRT RES SHR S %CPU %MEM THỜI GIAN+ LỆNH
1263 root 20 0 7224 612 520 R 100.0 0.1 2:21.40 dd
1264 root 20 0 7224 616 520 R 100.0 0.1 2:21.41 dd
1265 root 20 0 7224 612 520 R 99.0 0.1 2:21.03 dd
1266 root 20 0 7224 616 520 R 98.0 0.1 2:20.82 dd
1281 root 20 0 104416 3992 2920 S 1.0 0.4 0:00.03 sshd
1283 root 20 0 104416 3988 2920 S 1.0 0.4 0:00.03 sshd
1279 root 20 0 104556 4008 2924 S 0.7 0.4 0:00.08 sshd
Lệnh dd sử dụng gần 100% CPU của tất cả các lõi. Tiếp theo, chúng ta sẽ kiểm tra lệnh bằng tiện ích cpulimit. Đối với lệnh này, hãy xóa các dấu vết trước đó cho lệnh dd như sau:
root@server1:~# killall dd
[1] Đã kết thúc dd if=/dev/zero of=/dev/null
[3]- Đã kết thúc dd if=/dev/zero of=/dev/null
[2]- Đã kết thúc dd if=/dev/zero of=/dev/null
[4]+ Đã kết thúc dd if=/dev/zero of=/dev/null
root@server1:~#
Bây giờ hãy sử dụng cpulimit với cùng lệnh như sau:
root@server1:~# for j in `seq 1 4`; thực hiện lệnh cpulimit -l 20 dd if=/dev/zero of=/dev/null & xong
[1] 1429
[2] 1430
[3] 1431
[4] 1432
root@server1:~# Đã phát hiện tiến trình 1434
Đã phát hiện tiến trình 1433
Đã phát hiện tiến trình 1437
Đã phát hiện tiến trình 1439
[1] Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
[2] Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
[3]- Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
root@server1:~#
Bây giờ hãy kiểm tra mức sử dụng CPU bằng tiện ích cpulimit.
top - 11:59:10 hoạt động 16 phút, 2 người dùng, tải trung bình: 0,47, 0,71, 0,81
Nhiệm vụ: tổng cộng 256, 2 đang chạy, 251 đang ngủ, 3 đã dừng, 0 zombie
%Cpu0 : 2,0 us, 2,0 sy, 0,0 ni, 96,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu1 : 26,2 us, 22,8 sy, 0,0 ni, 50,7 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu2: 14,0 us, 12,3 sy, 0,0 ni, 73,8 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu3: 13,3 us, 11,6 sy, 0,0 ni, 75,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: tổng cộng 1010540, đã sử dụng 204064, còn trống 806476, bộ đệm 20408
KiB Swap: tổng cộng 1048572, đã sử dụng 0, còn trống 1048572. 98340 Bộ nhớ đệm
PID NGƯỜI DÙNG PR NI VIRT RES SHR S %CPU %MEM THỜI GIAN+ LỆNH
1433 root 20 0 7224 612 520 T 28,2 0,1 0:12,00 dd
1439 root 20 0 7224 616 520 R 26,6 0,1 0:12,13 dd
1434 root 20 0 7224 612 520 T 25,3 0,1 0:11,97 dd
1437 root 20 0 7224 612 516 T 22.9 0.1 0:11.93 dd
7 root 20 0 0 0 0 S 0.3 0.0 0:00.22 rcu_sched
8 root 20 0 0 0 0 S 0.3 0.0 0:00.21 rcuos/0
Như bạn có thể thấy ở trên, mức sử dụng CPU bị giới hạn từ 100% đến gần 20% đối với CPU đa lõi.
Xin chúc mừng! Chúng tôi đã thử nghiệm thành công cpulimit để giới hạn mức sử dụng CPU trong Ubuntu.
1 Lưu ý sơ bộ
Hướng dẫn này đã được thử nghiệm trên Ubuntu 24.04, nhưng cũng hoạt động trên các bản phát hành Ubuntu cũ hơn.2 Cài đặt CPULimit
Trước tiên, chúng ta cần cài đặt cpulimit như sau:
Mã:
sudo apt update
sudo apt install cpulimit
3 Giới hạn mức sử dụng CPU
Bây giờ, chúng ta sẽ kiểm tra tiện ích để giới hạn mức sử dụng CPU. Để thực hiện điều này, trước tiên chúng ta sẽ kiểm tra mức sử dụng CPU mà không sử dụng CPUlimit, sau đó triển khai CPUlimit để đánh giá. Chúng ta hãy làm rõ điều này bằng một ví dụ.- Sau đây là một ví dụ về cách sử dụng CPU của bạn với một ứng dụng trong CPU lõi đơn:
Mã:
dd if=/dev/zero of=/dev/null &
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22550%22%20height=%22143%22%3E%3C/svg%3E
Sau đó, chúng ta sẽ kiểm tra mức sử dụng CPU bằng lệnh:
Mã:
top
Mã:
top - 11:24:18 up 49 min, 1 user, load average: 0.94, 1.02, 1.79
Tasks: 249 total, 2 running, 247 sleeping, 0 stopped, 0 zombie
%Cpu(s): 13.4 us, 11.6 sy, 0.0 ni, 74.9 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st
KiB Mem: 1010540 total, 271652 used, 738888 free, 21760 buffers
KiB Swap: 1048572 total, 0 used, 1048572 free. 158204 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1850 root 20 0 7224 616 520 R [B]100.0[/b] 0.1 1:20.33 dd
1851 root 20 0 24952 1756 1180 R 0.3 0.2 0:00.03 top
1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.31 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
Mã:
fg
Bây giờ chúng ta có thể kiểm tra cpulimit để xem nó có thực hiện đúng như mong đợi không. Chúng ta hãy kiểm tra nó như sau:
Mã:
cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
root@server1:~# Đã phát hiện tiến trình 1853
[1]+ Xong cpulimit -l 30 dd if=/dev/zero of=/dev/null
root@server1:~#
Bây giờ chúng ta sẽ kiểm tra mức sử dụng CPU với top lệnh:
Mã:
top
Nhiệm vụ: tổng cộng 250, 2 đang chạy, 247 đang ngủ, 1 đã dừng, 0 zombie
%Cpu(s): 4,5 us, 4,1 sy, 0,0 ni, 91,4 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: tổng cộng 1010540, Đã sử dụng 271944, 738596 trống, 21816 bộ đệm
Hoán đổi KiB: Tổng cộng 1048572, đã sử dụng 0, 1048572 trống. 158212 bộ nhớ đệm Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1853 root 20 0 7224 612 520 T 33.8 0.1 0:35.53 dd
1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.37 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
Bây giờ bạn có thể thấy mức sử dụng CPU đã giảm từ 100% xuống 33,8%, gần 30%. Vì vậy, chúng tôi đã kiểm tra thành công tiện ích cpulimit, có thể giới hạn mức sử dụng CPU trong bản phân phối Ubuntu lõi đơn.
- Sau đây là một ví dụ về cách sử dụng CPU của bạn với một ứng dụng trong CPU nhiều lõi:
Mã:
nproc
Bây giờ chúng ta sẽ tiến hành kiểm tra mức sử dụng CPU mà không có cpulimit trong cả 4 lõi cho ứng dụng như sau:
Mã:
for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done
root@server1:~# for j in `seq 1 4`; thực hiện dd if=/dev/zero of=/dev/null & xong
[1] 1263
[2] 1264
[3] 1265
[4] 1266
root@server1:~#
Bây giờ hãy kiểm tra mức sử dụng CPU bằng lệnh top:
Mã:
top
Nhiệm vụ: tổng cộng 290, 5 đang chạy, 285 đang ngủ, 0 đã dừng, 0 zombie
%Cpu0 : 48,3 us, 51,3 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu1: 47,8 us, 52,2 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu2: 53,3 us, 46,4 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu3: 52,0 us, 48,0 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: tổng cộng 1010540, 209712 đã sử dụng, 800828 trống, 20276 bộ đệm
Hoán đổi KiB: tổng cộng 1048572, 0 đã sử dụng, 1048572 trống. 93632 bộ nhớ đệm
PID NGƯỜI DÙNG PR NI VIRT RES SHR S %CPU %MEM THỜI GIAN+ LỆNH
1263 root 20 0 7224 612 520 R 100.0 0.1 2:21.40 dd
1264 root 20 0 7224 616 520 R 100.0 0.1 2:21.41 dd
1265 root 20 0 7224 612 520 R 99.0 0.1 2:21.03 dd
1266 root 20 0 7224 616 520 R 98.0 0.1 2:20.82 dd
1281 root 20 0 104416 3992 2920 S 1.0 0.4 0:00.03 sshd
1283 root 20 0 104416 3988 2920 S 1.0 0.4 0:00.03 sshd
1279 root 20 0 104556 4008 2924 S 0.7 0.4 0:00.08 sshd
Lệnh dd sử dụng gần 100% CPU của tất cả các lõi. Tiếp theo, chúng ta sẽ kiểm tra lệnh bằng tiện ích cpulimit. Đối với lệnh này, hãy xóa các dấu vết trước đó cho lệnh dd như sau:
Mã:
killall dd
[1] Đã kết thúc dd if=/dev/zero of=/dev/null
[3]- Đã kết thúc dd if=/dev/zero of=/dev/null
[2]- Đã kết thúc dd if=/dev/zero of=/dev/null
[4]+ Đã kết thúc dd if=/dev/zero of=/dev/null
root@server1:~#
Bây giờ hãy sử dụng cpulimit với cùng lệnh như sau:
Mã:
for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done
[1] 1429
[2] 1430
[3] 1431
[4] 1432
root@server1:~# Đã phát hiện tiến trình 1434
Đã phát hiện tiến trình 1433
Đã phát hiện tiến trình 1437
Đã phát hiện tiến trình 1439
[1] Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
[2] Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
[3]- Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Xong cpulimit -l 20 dd if=/dev/zero of=/dev/null
root@server1:~#
Bây giờ hãy kiểm tra mức sử dụng CPU bằng tiện ích cpulimit.
Mã:
top
Nhiệm vụ: tổng cộng 256, 2 đang chạy, 251 đang ngủ, 3 đã dừng, 0 zombie
%Cpu0 : 2,0 us, 2,0 sy, 0,0 ni, 96,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu1 : 26,2 us, 22,8 sy, 0,0 ni, 50,7 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu2: 14,0 us, 12,3 sy, 0,0 ni, 73,8 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu3: 13,3 us, 11,6 sy, 0,0 ni, 75,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: tổng cộng 1010540, đã sử dụng 204064, còn trống 806476, bộ đệm 20408
KiB Swap: tổng cộng 1048572, đã sử dụng 0, còn trống 1048572. 98340 Bộ nhớ đệm
PID NGƯỜI DÙNG PR NI VIRT RES SHR S %CPU %MEM THỜI GIAN+ LỆNH
1433 root 20 0 7224 612 520 T 28,2 0,1 0:12,00 dd
1439 root 20 0 7224 616 520 R 26,6 0,1 0:12,13 dd
1434 root 20 0 7224 612 520 T 25,3 0,1 0:11,97 dd
1437 root 20 0 7224 612 516 T 22.9 0.1 0:11.93 dd
7 root 20 0 0 0 0 S 0.3 0.0 0:00.22 rcu_sched
8 root 20 0 0 0 0 S 0.3 0.0 0:00.21 rcuos/0
Như bạn có thể thấy ở trên, mức sử dụng CPU bị giới hạn từ 100% đến gần 20% đối với CPU đa lõi.
Xin chúc mừng! Chúng tôi đã thử nghiệm thành công cpulimit để giới hạn mức sử dụng CPU trong Ubuntu.