Mở đầu
Với mỗi lần thực thi chịu tải 10.000 request/giây khi chạy mỗi jmeter single unit thì không thể test được khả năng chịu tải cho nên tôi giới thiệu đến các bạn cách test bằng Jmeter cấu hình Cluster
Tham khảo nội dung sau để biết cách chạy test Jmeter local, còn việc tạo file jmeter cơ bản thì không đề cập ở bài viết này.
Test Jmeter trên môi trường local
Basic về test chịu tải
Overview về cấu hình Cluster
Chạy với cơ sở hạ tầng gồm master server, slave server (nhiều máy).
Mình sẽ đặt file setting lên Master server rồi cho chạy, Slave server sẽ tổng hợp log kết quả v.v.. lên cho Master server. Cho nên bên SLave server chỉ cần khởi động Jmeter là được.
Setup Master server
chú yếu thì có
- install jmeter
- giải nén
- setting Slave server
Install jmeter
tại /home/ec2-user
1 2 3 4 | $ <span class="token function">sudo</span> yum update -y $ <span class="token function">wget</span> http://ftp.riken.jp/net/apache//jmeter/binaries/apache-jmeter-5.1.1 |
Giải nén
1 2 3 | $ <span class="token function">tar</span> zxvf apache-jmeter-5.1.1.tgz |
Setting Slave server
Chỉnh sửa property.
đi đến mục bin trong apache-jmeter-5.1.1, mở property bằng vim, nhập DNS name của Slave server vào ô ghi remote host.
Lưu ý chỗ này nếu nhập IP address thì sẽ bị báo error nên phải nhập đúng giá trị nhé các bạn.
Nếu muốn thiết lập nhiều Slave server thì ghi cách nhau bằng dấu phảy , là được.
1 2 3 4 | <span class="token builtin class-name">cd</span> apache-jmeter-5.1.1/bin/ <span class="token function">sudo</span> <span class="token function">vim</span> jmeter.properties |
1 2 3 | remote_hosts=ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com |
Setup Slaver server
- install jmeter
- giải nén
- khởi động Jmeter
Khởi động jmeter
check đảm bảo là chưa được khởi động trước khi check process:
1 2 3 4 | $ <span class="token function">ps</span> -aux <span class="token operator">|</span> <span class="token function">grep</span> jemter ec2-user <span class="token number">14418</span> <span class="token number">0.0</span> <span class="token number">0.0</span> <span class="token number">119468</span> <span class="token number">896</span> pts/1 S+ <span class="token number">11</span>:36 <span class="token number">0</span>:00 <span class="token function">grep</span> --color<span class="token operator">=</span>auto jemter |
Khởi động:
1 2 3 | /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server <span class="token operator">&</span> |
check lại process để thấy jmeter đã được khởi động.
1 2 3 4 5 | $ <span class="token function">ps</span> -aux <span class="token operator">|</span> <span class="token function">grep</span> jmeter ec2-user <span class="token number">4324</span> <span class="token number">0.0</span> <span class="token number">0.0</span> <span class="token number">119928</span> <span class="token number">2856</span> pts/0 S <span class="token number">11</span>:43 <span class="token number">0</span>:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server ec2-user <span class="token number">4326</span> <span class="token number">0.0</span> <span class="token number">0.0</span> <span class="token number">119928</span> <span class="token number">2892</span> pts/0 S <span class="token number">11</span>:43 <span class="token number">0</span>:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -Dserver_port<span class="token operator">=</span><span class="token number">1099</span> -s -j jmeter-server.log ec2-user <span class="token number">4354</span> <span class="token number">0.4</span> <span class="token number">2.0</span> <span class="token number">7934128</span> <span class="token number">158084</span> pts/0 Sl <span class="token number">11</span>:43 <span class="token number">0</span>:02 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms4g -Xmx4g -XX:MaxMetaspaceSize<span class="token operator">=</span>256m -XX:+UseG1GC -XX:MaxGCPauseMillis<span class="token operator">=</span><span class="token number">100</span> -XX:G1ReservePercent<span class="token operator">=</span><span class="token number">20</span> -Djava.security.egd<span class="token operator">=</span>file:/dev/urandom -Duser.language<span class="token operator">=</span>en -Duser.region<span class="token operator">=</span>EN -jar /home/ec2-user/apache-jmeter-5.1.1/bin/ApacheJMeter.jar -Dserver_port<span class="token operator">=</span><span class="token number">1099</span> -s -j jmeter-server.log |
Test chịu tải
Khi Jmeter được Slave server khởi động thành công thì sẽ chuyển sang trạng thái chờ lệnh từ bên Master Server cho nên lúc này sẽ thực hiện test chịu tải.
Để check process lần này nên lúc nãy sau command /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server &
tôi đã cho cancel rồi, cơ mà bình thường thì cứ để cho nó được khởi động luôn vậy.
chỗ này cần phải sudo.
Command khởi động là /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter
, -n là khởi đọng bằng CUI mode, -t là option chỉ định file setting.
Ngoài ra, file setting thì bắt buộc phải chỉ định bằng path tuyệt đối.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ <span class="token function">sudo</span> <span class="token function">su</span> $ /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -n -t /home/ec2-user/test.jmx -r Creating summariser <span class="token operator"><</span>summary<span class="token operator">></span> Created the tree successfully using /home/ec2-user/test.jmx Configuring remote engine: ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com Exception creating connection to: ec2-aa-aa-aa-aa.ap.ap-northeast-1.compute.amazonaws.com<span class="token punctuation">;</span> nested exception is: java.io.FileNotFoundException: rmi_keystore.jks <span class="token punctuation">(</span>No such <span class="token function">file</span> or directory<span class="token punctuation">)</span> Failed to configure ec2-aa-aa-aa-aa.ap.ap-northeast-1.compute.amazonaws.com Stopping remote engines Remote engines have been stopped Error <span class="token keyword">in</span> NonGUIDriver java.lang.RuntimeException: Following remote engines could not be configured:<span class="token punctuation">[</span>ec2-aa-aa-aa-aa.ap.ap-northeast-1.compute.amazonaws.com<span class="token punctuation">]</span> |
Thi thoảng sẽ có xuất hiện Error in NonGUIDriver java.lang.RuntimeException, trường hợp này là có vấn đề gì đó đã xảy ra bên Slaver server, chỉ cần khởi động lại Jmeter là được.
Nếu không thể reboot được thì kill luôn process đi, kill process dưới cùng trong 3 process.
1 2 3 4 5 6 7 8 9 10 | $ <span class="token function">ps</span> -aux <span class="token operator">|</span> <span class="token function">grep</span> jmeter ec2-user <span class="token number">4324</span> <span class="token number">0.0</span> <span class="token number">0.0</span> <span class="token number">119928</span> <span class="token number">2856</span> pts/0 S <span class="token number">11</span>:43 <span class="token number">0</span>:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server ec2-user <span class="token number">4326</span> <span class="token number">0.0</span> <span class="token number">0.0</span> <span class="token number">119928</span> <span class="token number">2892</span> pts/0 S <span class="token number">11</span>:43 <span class="token number">0</span>:00 /bin/sh /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -Dserver_port<span class="token operator">=</span><span class="token number">1099</span> -s -j jmeter-server.log ec2-user <span class="token number">4354</span> <span class="token number">0.4</span> <span class="token number">2.0</span> <span class="token number">7934128</span> <span class="token number">158084</span> pts/0 Sl <span class="token number">11</span>:43 <span class="token number">0</span>:02 /usr/bin/java -server -XX:+HeapDumpOnOutOfMemoryError -Xms4g -Xmx4g -XX:MaxMetaspaceSize<span class="token operator">=</span>256m -XX:+UseG1GC -XX:MaxGCPauseMillis<span class="token operator">=</span><span class="token number">100</span> -XX:G1ReservePercent<span class="token operator">=</span><span class="token number">20</span> -Djava.security.egd<span class="token operator">=</span>file:/dev/urandom -Duser.language<span class="token operator">=</span>en -Duser.region<span class="token operator">=</span>EN -jar /home/ec2-user/apache-jmeter-5.1.1/bin/ApacheJMeter.jar -Dserver_port<span class="token operator">=</span><span class="token number">1099</span> -s -j jmeter-server.log $ <span class="token function">kill</span> <span class="token number">4354</span> $ <span class="token function">ps</span> -aux <span class="token operator">|</span> <span class="token function">grep</span> jmeter ec2-user <span class="token number">4476</span> <span class="token number">0.0</span> <span class="token number">0.0</span> <span class="token number">119468</span> <span class="token number">976</span> pts/0 S+ <span class="token number">11</span>:59 <span class="token number">0</span>:00 <span class="token function">grep</span> --color<span class="token operator">=</span>auto jmeter <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>+ Exit <span class="token number">143</span> /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server |
Sau đó khởi động lại
1 2 3 | $ /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter-server <span class="token operator">&</span> |
Quay lại Master server, chạy lại
1 2 3 4 5 6 7 8 9 10 | $ /home/ec2-user/apache-jmeter-5.1.1/bin/jmeter -n -t imp-test.jmx -r Creating summariser <span class="token operator"><</span>summary<span class="token operator">></span> Created the tree successfully using imp-test.jmx Configuring remote engine: ec2-aa-aa-aa-aa.ap-northeast-1.compute.amazonaws.com Starting remote engines Starting the <span class="token builtin class-name">test</span> @ Fri Sep <span class="token number">13</span> <span class="token number">12</span>:07:54 UTC <span class="token number">2019</span> <span class="token punctuation">(</span><span class="token number">1568376474892</span><span class="token punctuation">)</span> Remote engines have been started Waiting <span class="token keyword">for</span> possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port <span class="token number">4445</span> |
Đến đây có show Waiting for thì là việc test chịu tải đã thành công!!!
Refer
Dùng SpotInstance và JMeter để test chịu tải 4.000.000 req/min