CYBERSOFT
Đăng nhập

JMeter nâng cao: phân tán, correlation & tuning

Chuyên nâng caoJMeterNâng cao
🗓 1 tháng trước19 phút đọc·👁 1,037 lượt xem👤 422 người đọc

Scale JMeter cho tải ngân hàng cao: kiểm thử phân tán master-slave, correlation token động, JSR223/Groovy, tuning JVM/heap, tránh bẫy GUI, sinh HTML dashboard và tích hợp CI với quality gate.

1. Vì sao một máy JMeter là không đủ

Một tiến trình JMeter chạy trên một máy có giới hạn: JVM chỉ cấp phát được bấy nhiêu heap, một CPU chỉ tạo được vài nghìn thread trước khi context-switch làm chậm chính máy tạo tải. Với ngân hàng cần mô phỏng hàng chục nghìn giao dịch đồng thời trong ngày lương, một máy sẽ bão hòa ở phía client trước cả server đích — bạn đo giới hạn của JMeter chứ không phải của hệ thống. Đây là lúc cần distributed testing (kiểm thử phân tán): một máy master điều phối nhiều máy slave cùng sinh tải.

Trước khi phân tán, luôn tối ưu trên một máy đã: mô hình tải hợp lý, tắt Listener nặng, tăng heap, tối ưu Assertion. Chỉ khi một máy đã cạn CPU/băng thông mà chưa đủ tải mới scale ngang. Phân tán không phải viên đạn bạc — nó thêm độ phức tạp về mạng (RMI), đồng bộ dữ liệu và thu thập kết quả. Bài này đi sâu: kiến trúc master-slave, correlation cho token động, JSR223/Groovy, tuning JVM, tránh bẫy GUI, sinh HTML dashboard, và tích hợp CI.

Nguyên tắc: scale dọc (heap, tối ưu) trước, scale ngang (thêm slave) sau. Mỗi slave nên là một máy tách biệt, cùng phiên bản JMeter và Java với master.

2. Kiến trúc master-slave (remote testing)

Trong distributed testing, máy master (còn gọi client/controller) giữ file .jmx và điều khiển; các máy slave (còn gọi server/remote host) chạy tiến trình jmeter-server và thực sự sinh tải tới hệ thống đích. Master không tự sinh tải mà phát kịch bản qua RMI (Remote Method Invocation) tới từng slave, ra lệnh bắt đầu đồng thời, rồi gom kết quả về. Điểm mấu chốt: số thread khai trong Thread Group được nhân lên theo số slave. 1000 thread × 3 slave = 3000 user ảo đồng thời.

Distributed testing · master (client) điều phối slaves (servers) Master -r · phát .jmx · gom kết quả Slave 1 (jmeter-server) 1000 threads Slave 2 1000 threads Slave 3 1000 threads RMI port 1099/1098 · mỗi thread nhân theo số slave = 3000 users ảo
Master điều phối 3 slave qua RMI; mỗi slave chạy đủ số thread.
bash
# Trên MỖI slave: khởi động jmeter-server (mở RMI port 1099/1098)
# Chỉ định IP để master gọi lại đúng interface
jmeter-server -Djava.rmi.server.hostname=10.0.1.21

# Trên master: chạy non-GUI, chỉ định các slave qua -R
jmeter -n -t payday-load.jmx -l results.jtl -e -o report/ \
       -R 10.0.1.21,10.0.1.22,10.0.1.23

# Hoặc liệt kê remote_hosts trong jmeter.properties rồi dùng -r
jmeter -n -t payday-load.jmx -l results.jtl -r
⚠️ RMI dùng nhiều cổng động — trong VPC/firewall phải mở đúng port hoặc ghim server.rmi.localport. Master và slave phải cùng phiên bản JMeter/Java, nếu lệch sẽ lỗi deserialization khó chẩn đoán.

3. Correlation: bắt token động

Ứng dụng ngân hàng thật không bao giờ cho hard-code token. Sau khi đăng nhập, server trả về một token phiên (JWT, CSRF token, hoặc session id) mà mọi request sau phải kèm theo. Nếu bạn ghi cứng token đã copy tay, nó hết hạn sau vài phút và toàn bộ request trả 401. Correlation là kỹ thuật trích xuất giá trị động từ phản hồi rồi đưa vào request tiếp theo qua biến JMeter. Hai công cụ chính: JSON Extractor (theo JSONPath cho API JSON) và Regular Expression Extractor (cho HTML/text).

🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 23% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!