Số lượng Virtual User trong JMeter có thể tạo được ở 1 máy?

Khi bạn làm task performance test, bạn rất băn khoăn là số lượng user mà cái máy tạo load của bạn có thể tạo ra là bao nhiêu. Bạn search trên mạng rất nhiều và cũng chỉ thấy cách tính chung chung hoặc bạn join các group để hỏi nhưng cũng chỉ nhận được các câu trả lời dựa trên kinh nghiệm.

Hôm nay mình sẽ cố trả lời câu hỏi đó bằng 1 cách thực tế và có chút khoa học hơn. Tất nhiên là câu trả lời này dựa vào kiến thức của mình, chưa chắc đã đúng. =)))) Coi như thêm 1 cách tính cho bạn nhức cái đầu. :v

Tóm gọn câu trả lời như sau:

Tùy vào JMeter test plan, số lượng virtual user (gọi tắt là user) sẽ thay đổi. Con số user tối đa 1 máy có thể tạo được chính là con số khiến CPU đạt ngưỡng 100%

Giờ mình sẽ đi giải thích:

  • JMeter tạo user dưới dạng các Thread của hệ điều hành, còn gọi là OS Thread. Các Thread này sẽ được CPU switch qua switch lại để run, gọi là time slicing. Ví dụ run Thread 1 được 10ms, nó sẽ nhảy sang Thread 2 run thêm 10ms rồi nhảy sang Thread 3 ….
  • Việc nhảy qua nhảy lại giữa các Thread này là việc của CPU, JMeter không can thiệp được.
  • Vì mỗi Thread của JMeter sẽ gửi các request nên sẽ có lúc Thread đó không làm gì, gửi xong rồi thì ngồi đợi thôi. Trong những lúc Thread ngồi chơi như vậy thì CPU cũng ngồi chơi, còn gọi là idle time.
  • Nếu CPU ngồi chơi, có nghĩa là CPU còn khỏe, còn handle thêm được Threads khác.
  • Chúng ta tăng dần số lượng Thread (không phải tăng quá đà nhé) để CPU từ từ đạt mức CPU 100% và duy trì xấp xỉ 100% trong suốt quá trình run test thì có nghĩa đây là con số user tối đa mà CPU có thể handle cho cái Test Plan này.

Câu hỏi tiếp theo:

  • Nếu tôi cứ tiếp tục tăng Threads lên thì sao, tôi vẫn thấy CPU 100% và có vẻ mọi thứ vẫn đang ổn?

Khi bạn tiếp tục tăng, chắc chăn CPU sẽ hoạt động hết công suất nhưng nó sẽ xảy ra tình trạng, nhiều Thread đáng nhẽ phải được run thì sẽ phải ngồi đợi (thời gian đợi này khác thời gian ngồi đợi response từ server trả về) –> không tối ưu lắm.

  • Sao tôi không thấy bạn nhắc đến Memory?

JMeter là java app, nó sẽ dùng đến 2 phần bộ nhớ Heap và Stack. Heap để lưu các object mà nó khởi tạo, default value cho heap trong JMeter là 1Gb. Nếu bạn run test gặp tình trạng OutOfMemory thì có nghĩa là JMeter đã dùng hết lượng memory có trong Heap, bạn cần phải cho JMeter nhiều memory hơn. Tuy nhiên memory của RAM mình thấy các máy bây giờ đã phần là rất nhiều, việc cắt 5-7 Gb của JMeter không phải vấn đề. Do đó giới hạn chính vẫn là CPU.

  • Vậy thì có nên luôn set Heap size cho JMeter là 5G ko?

Câu trả lời là không vì cái máy thường được dùng để runt test là máy cá nhân của bạn (sad but true), máy bạn sẽ chạy rất nhiều các phần mềm khác nhau và phần mềm nào cũng cần memory hết. Nếu mặc định set JMeter có 5G heap thì vừa khởi động JMeter cái là nó cắt luôn của bạn 5Gb trong khi có thể run cái test demo mất vài trăm Mb –> quá lãng phí, không cần thiết. Hãy đợi đến khi nào bị OutOfMemory thì hãy tăng nó lên, và tăng từ từ thôi, từ 1Gb –> 2Gb chẳng hạn, đừng set cao làm gì.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments