NỘI DUNG BÀI HỌC
✅ Cách cấu hình JMeter để chạy test trên nhiều máy
✅ Run test từ máy Master tới các máy Slave
✅ Cách thu thập và phân tích kết quả test phân tán
✅ Cách xử lý các lỗi phổ biến khi chạy remote test
🎯 1. Mục tiêu bài học
Sau khi học xong, bạn sẽ biết:
-
Remote / Distributed Testing là gì.
-
Cách cấu hình JMeter để chạy test trên nhiều máy.
-
Cách chạy test từ máy Master tới các máy Slave.
-
Cách thu thập và phân tích kết quả test phân tán.
-
Cách xử lý các lỗi phổ biến khi chạy remote test.
💡 2. Khái niệm cơ bản
Remote Testing (hay còn gọi là Distributed Testing) trong JMeter là cách chia tải test ra nhiều máy.
-
Master (Client): Máy điều khiển, nơi bạn chạy test.
-
Slaves (Servers): Các máy thực tế chạy test và gửi kết quả về Master.
Mục tiêu: giúp JMeter có thể mô phỏng nhiều người dùng đồng thời hơn so với việc chỉ chạy trên 1 máy.
⚙️ 3. Mô hình hoạt động
-
Giao tiếp giữa Master và Slave dùng RMI (Remote Method Invocation).
-
Mặc định dùng port 1099 để kết nối.
-
Có thể chạy nhiều Slave cùng lúc để tăng tải.
🖥️ 4. Yêu cầu trước khi cấu hình
Để chạy được remote test, các máy cần:
-
Cùng phiên bản JMeter.
-
Cùng phiên bản Java (nên dùng Java 11 hoặc 17).
-
Kết nối cùng mạng LAN hoặc VPN.
-
Mở các port cần thiết: 1099 và 4000 (hoặc theo cấu hình RMI).
-
Tắt Firewall hoặc cho phép RMI port.
🔧 5. Cấu hình chi tiết
🧩 Trên mỗi máy Slave
-
Mở file:
-
Tìm và chỉnh các dòng sau:
-
Khởi động JMeter Server:
-
Windows:
-
Linux/Mac:
-
-
Nếu thấy dòng log sau là OK:
🧩 Trên máy Master
-
Mở file:
-
Tìm dòng:
(Đây là IP của các Slave, cách nhau bằng dấu phẩy)
-
Kiểm tra kết nối:
-
Chạy test (non-GUI mode khuyến khích dùng):
hoặc nếu bạn đã khai báo
remote_hoststrong file properties:
🧪 6. Thực hành từng bước
Chuẩn bị:
-
Master: 192.168.1.10
-
Slave1: 192.168.1.11
-
Slave2: 192.168.1.12
-
Cài đặt JMeter và Java trên tất cả các máy.
Bước 1: Cấu hình Slave
Mở file jmeter.properties trên mỗi Slave và chỉnh:
Sau đó chạy:
Bước 2: Cấu hình Master
Trong jmeter.properties:
Bước 3: Tạo file test (LoginTest.jmx)
-
Thread Group: 100 threads
-
HTTP Request: Gửi request đến
https://example.com -
Listener: Simple Data Writer (ghi ra
result.jtl)
Bước 4: Chạy test
Bước 5: Xem kết quả
-
Mở thư mục
report/index.html -
Xem các chỉ số:
-
Throughput: số request/giây
-
Response Time: thời gian phản hồi trung bình
-
Error %: tỉ lệ lỗi
-
⚠️ 7. Các lỗi thường gặp
| Lỗi hiển thị | Nguyên nhân | Cách khắc phục |
|---|---|---|
java.rmi.ConnectException: Connection refused |
Port RMI bị chặn hoặc IP sai | Mở port 1099 và 4000, kiểm tra firewall |
Server not found |
Chưa khởi động jmeter-server trên slave | Chạy lại jmeter-server |
ClassNotFoundException |
Version hoặc plugin khác nhau | Cài cùng version JMeter, copy thư mục lib giống nhau |
| Kết quả sai lệch | Máy có timezone khác nhau | Đồng bộ thời gian các máy |
| Kết quả không tổng hợp | Slave bị ngắt kết nối khi test | Kiểm tra log trên Slave |
📋 8. Mẹo hữu ích
-
Dùng
-Gđể truyền tham số chung cho tất cả Slave:Trong JMeter, gọi
${__P(users)}để lấy giá trị. -
Không nên mở Listeners nặng (View Results Tree, Graph Results) khi test phân tán.
-
Dùng non-GUI mode để tiết kiệm tài nguyên:
-
Nên chạy test nhỏ trước (smoke test) để kiểm tra kết nối trước khi chạy test lớn.
📈 9. Kiểm tra kết quả
-
File kết quả:
.jtl -
Báo cáo HTML:
report/index.html -
Xem các thông số:
-
Throughput – tốc độ xử lý yêu cầu
-
Average / Median / 90% Line – thời gian phản hồi
-
Error Rate – phần trăm lỗi
-
🧭 10. Bài tập thực hành
Yêu cầu:
-
Tạo test plan gọi
https://httpbin.org/get. -
Chạy test qua 2 máy Slave.
-
Mỗi máy chạy 500 threads trong 1 phút.
-
Tổng hợp kết quả trên Master.
-
So sánh kết quả khi:
-
Chạy trên 1 máy
-
Chạy phân tán trên 2 máy
-
-
Ghi nhận xét: throughput và response time khác nhau thế nào?
📚 11. Tài liệu tham khảo
✅ Tóm tắt nhanh
| Thành phần | Vai trò |
|---|---|
| Master | Gửi test plan, thu kết quả |
| Slave | Chạy tải thực tế |
| Port mặc định | 1099 (RMI), 4000 (Local RMI) |
| Chạy test | jmeter -n -t test.jmx -R ip1,ip2 -l result.jtl -e -o report |
| Nên dùng | Non-GUI mode |
| Cần đồng bộ | JMeter version, Java version, plugin |

