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.
- Quy trình xử lý dữ liệu trong mô hình này diễn ra theo các bước cụ thể sau:
• Phân phối kịch bản: Máy Master giữ file kịch bản gốc (TestPlan.jmx). Khi bắt đầu, Master sẽ gửi file TestPlan.jmx này sang các máy Slave (là các máy đã được cài đặt và chạy jmeter-server),.
• Thực thi đổ tải: Các máy Slave nhận kịch bản, trực tiếp thực hiện việc gửi các Request đến Server mục tiêu và nhận về các Response.
• Thu thập kết quả: Sau khi có kết quả từ Server, các Slave không lưu trữ báo cáo riêng lẻ mà gửi ngược dữ liệu kết quả về cho máy Master.
• Tổng hợp dữ liệu: Máy Master nhận dữ liệu từ tất cả các Slave và ghi vào một file duy nhất là report.jtl. File này sẽ chứa toàn bộ kết quả của quá trình chạy test từ tất cả các máy nhánh.
• Xuất báo cáo: Cuối cùng, từ file report.jtl tổng hợp, Master sẽ thực hiện chuyển đổi (generate) sang định dạng HTML report để người dùng theo dõ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:
jmeter-server.bat -
Linux/Mac:
./jmeter-server
-
-
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:
server_port=1099server.rmi.localport=4000server.rmi.ssl.disable=true
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 |

