Cách làm stress test trên hệ thống Linux

Stress test các máy chủ Linux là một ý tưởng hay nếu bạn muốn xem chúng hoạt động có tốt không. Trong bài đăng này, Quantrimang sẽ giới thiệu một số công cụ có thể giúp bạn thêm áp lực vào hệ thống để kiểm tra và đánh giá kết quả.

Tại sao lại phải tăng áp lực cho hệ thống Linux?

Nguyên nhân là do đôi khi bạn có thể muốn biết một hệ thống sẽ hoạt động như thế nào khi phải chịu nhiều áp lực từ một lượng lớn các quy trình đang chạy, traffic mạng lớn, sử dụng bộ nhớ quá mức, v.v. Loại thử nghiệm này có thể giúp đảm bảo rằng một hệ thống đã sẵn sàng để được sử dụng phổ thông.

Vòng lặp thủ công

Cách đầu tiên bao gồm chạy một số vòng lặp trên dòng lệnh và xem chúng ảnh hưởng đến hệ thống như nào. Kỹ thuật này gây gánh nặng cho CPU bằng cách tải rất nhiều dữ liệu. Kết quả có thể dễ dàng được nhìn thấy bằng cách sử dụng các lệnh thời gian hoạt động hoặc tương tự.

Trong lệnh dưới đây, bốn vòng lặp không kết thúc được khởi động. Bạn có thể tăng số vòng lặp bằng cách thêm chữ số hoặc sử dụng biểu thức bash như {1..6} thay cho "1 2 3 4".

for i in 1 2 3 4; do while : ; do : ; done & done

Nhập dòng lệnh, lệnh này sẽ bắt đầu bốn vòng lặp vô tận trên nền hệ thống.

$ for i in 1 2 3 4; do while : ; do : ; done & done
[1] 205012
[2] 205013
[3] 205014
[4] 205015

Trong trường hợp này, phiên làm việc 1-4 đã được khởi động. Cả số phiên làm việc và ID quá trình đều được hiển thị.

Để quan sát hiệu ứng trên mức tải trung bình, sử dụng lệnh được hiển thị bên dưới. Trong trường hợp này, lệnh thời gian hoạt động được chạy mỗi 30 giây:

$ while true; do uptime; sleep 30; done

Nếu bạn định chạy thử nghiệm định kỳ, bạn có thể đặt lệnh vòng lặp như sau:

#!/bin/bash

while true
do
  uptime
  sleep 30
done

Trong output, bạn có thể thấy mức trung bình tải tăng lên và sau đó bắt đầu giảm dần khi các vòng lặp đã kết thúc.

 11:25:34 up 5 days, 17:27,  2 users,  load average: 0.15, 0.14, 0.08
 11:26:04 up 5 days, 17:27,  2 users,  load average: 0.09, 0.12, 0.08
 11:26:34 up 5 days, 17:28,  2 users,  load average: 1.42, 0.43, 0.18
 11:27:04 up 5 days, 17:28,  2 users,  load average: 2.50, 0.79, 0.31
 11:27:34 up 5 days, 17:29,  2 users,  load average: 3.09, 1.10, 0.43
 11:28:04 up 5 days, 17:29,  2 users,  load average: 3.45, 1.38, 0.54
 11:28:34 up 5 days, 17:30,  2 users,  load average: 3.67, 1.63, 0.66
 11:29:04 up 5 days, 17:30,  2 users,  load average: 3.80, 1.86, 0.76
 11:29:34 up 5 days, 17:31,  2 users,  load average: 3.88, 2.06, 0.87
 11:30:04 up 5 days, 17:31,  2 users,  load average: 3.93, 2.25, 0.97
 11:30:34 up 5 days, 17:32,  2 users,  load average: 3.64, 2.35, 1.04 <== loops
 11:31:04 up 5 days, 17:32,  2 users,  load average: 2.20, 2.13, 1.01     stopped
 11:31:34 up 5 days, 17:33,  2 users,  load average: 1.40, 1.94, 0.98

Vì các load được hiển thị trung bình trên 1, 5 và 15 phút, nên các giá trị sẽ mất một lúc để quay lại mức bình thường đối với hệ thống.

Để dừng các vòng lặp, hãy ra lệnh kill như bên dưới - giả sử số phiên làm việc là 1-4 như bên trên. Nếu bạn không chắc chắn, hãy sử dụng lệnh jobs để xác minh ID phiên làm việc.

$ kill %1 %2 %3 %4

Công cụ chuyên dụng để thêm áp lực cho hệ thống

Một cách khác để tạo áp lực hệ thống liên quan đó là sử dụng một công cụ được xây dựng thêm áp lực vào hệ thống cho bạn. Một trong số đó được gọi là “stress” và có thể thêm áp lực hệ thống theo một số cách khác nhau. Công cụ thêm áp lực là một trình tạo khối lượng phiên làm việc, cung cấp các bài kiểm tra áp lực I/O của CPU, bộ nhớ và ổ đĩa.

Với tùy chọn --cpu, lệnh stress sử dụng hàm căn bậc hai để buộc CPU phải làm việc chăm chỉ hơn. Số lượng CPU được chỉ định càng cao, load sẽ tăng nhanh hơn.

Lệnh watch-it-2 có thể được dùng để đánh giá hiệu quả của việc sử dụng bộ nhớ hệ thống. Lưu ý rằng nó sử dụng lệnh free để xem phản hồi của áp lực.

$ cat watch-it-2
#!/bin/bash

while true
do
  free
  sleep 30
done

Bắt đầu theo dõi áp lực hệ thống:

$ stress --cpu 2
$ ./watch-it
 13:09:14 up 5 days, 19:10,  2 users,  load average: 0.00, 0.00, 0.00
 13:09:44 up 5 days, 19:11,  2 users,  load average: 0.68, 0.16, 0.05
 13:10:14 up 5 days, 19:11,  2 users,  load average: 1.20, 0.34, 0.12
 13:10:44 up 5 days, 19:12,  2 users,  load average: 1.52, 0.50, 0.18
 13:11:14 up 5 days, 19:12,  2 users,  load average: 1.71, 0.64, 0.24
 13:11:44 up 5 days, 19:13,  2 users,  load average: 1.83, 0.77, 0.30

Càng nhiều CPU được chỉ định trên dòng lệnh, tải càng nhanh hơn.

$ stress --cpu 4
$ ./watch-it
 13:47:49 up 5 days, 19:49,  2 users,  load average: 0.00, 0.00, 0.00
 13:48:19 up 5 days, 19:49,  2 users,  load average: 1.58, 0.38, 0.13
 13:48:49 up 5 days, 19:50,  2 users,  load average: 2.61, 0.75, 0.26
 13:49:19 up 5 days, 19:50,  2 users,  load average: 3.16, 1.06, 0.38
 13:49:49 up 5 days, 19:51,  2 users,  load average: 3.49, 1.34, 0.50
 13:50:19 up 5 days, 19:51,  2 users,  load average: 3.69, 1.60, 0.61

Lệnh stress cũng có thể tạo áp lực cho hệ thống bằng cách thêm I/O và tải bộ nhớ với các tùy chọn --io (input/output) và --vm (bộ nhớ).

Ví dụ, lệnh này thêm áp lực bộ nhớ được chạy, và sau đó dùng watch-it-2 để bắt đầu:

$ stress --vm 2
$ watch-it-2
              total        used        free      shared  buff/cache   available
Mem:        6087064      662160     2519164        8868     2905740     5117548
Swap:       2097148           0     2097148
              total        used        free      shared  buff/cache   available
Mem:        6087064      803464     2377832        8864     2905768     4976248
Swap:       2097148           0     2097148
              total        used        free      shared  buff/cache   available
Mem:        6087064      968512     2212772        8864     2905780     4811200
Swap:       2097148           0     2097148

Cách khác là bạn có thể sử dụng tùy chọn --io để thêm hoạt động input/output cho hệ thống. Trong trường hợp này, hãy dùng lệnh:

$ stress --io 4

Sau đó, bạn có thể quan sát mức độ áp lực IO bằng iotop. Lưu ý iotop yêu cầu quyền root.

trước

$ sudo iotop -o
Total DISK READ:         0.00 B/s | Total DISK WRITE:        19.36 K/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:      27.10 K/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 269308 be/4 root        0.00 B/s    0.00 B/s  0.00 %  1.24 % [kworker~fficient]
    283 be/3 root        0.00 B/s   19.36 K/s  0.00 %  0.26 % [jbd2/sda1-8]

sau

Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 270983 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 51.45 % stress --io 4
 270984 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 51.36 % stress --io 4
 270985 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 50.95 % stress --io 4
 270982 be/4 shs         0.00 B/s    0.00 B/s  0.00 % 50.80 % stress --io 4
 269308 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.09 % [kworker~fficient]

Tổng kết

Các công cụ kiểm tra áp lực hệ thống sẽ giúp bạn biết được hệ điều hành sẽ phản ứng như thế nào trong các tình huống khi hoạt động thực tế.

Thứ Hai, 06/07/2020 09:10
52 👨 790
0 Bình luận
Sắp xếp theo
    ❖ Linux