Forum Discussion

dmltn84's avatar
dmltn84
Occasional Contributor
13 years ago

WS Load test consumes 100% cpu for only 20 virtual users

Hello,

I have set up a load test in SoapUI which consists of 4 steps:

1. Generates random id
2. Generates identification number which should match validation with control numbers (as groovy script)
3. Sends web service request with these two parametrized values (rest is hard-coded)
4. 2 seconds delay

I start a load test in soap ui for 20 virtual users and in a minute SoapUI consumes 100% of CPU. Same behavior is observed in load ui and during distributed testing (CPU on agents is consumed 100%)

Even when I stop tests CPU usage remains at 98-100% and I have to restart soapui/loadui to get resources back.

Computer running soapui:
Win 7 32bit
i5-650 processor 3.2 GHx
3,5 Gb RAM

Agents are GUIless ubuntu machines running in VMWare with:
1 Intel Xeon processor X5675 3 GHz
3 Gb RAM

I have serious doubts that hardware limit is hit, since sometimes load is generated correctly (CPU utilization is always less than 10% even with 50 virtual users) and sometimes it's impossible to run a test.

I tried to switch java versions (between latest releases of 1.6.x and 1.7.x series) with no success, I also tried with bundled java and still there is no pattern.

Please advise how this situation can be remedied, has anyone had such problem with SoapUI/LoadUI?
  • Virtual users is irrelevant; what's the TPS and what does the Groovy Script look like?
  • dmltn84's avatar
    dmltn84
    Occasional Contributor
    TPS is around 15 for 50 virtual users, for 20 it is less than 10.

    As far as script is concerned:

    def dni = ['01', '02', '03', '04', '05', '06', '07', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28']

    def stulecia = ['81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '01', '02', '03', '04', '05', '06', '07', '08', '10', '11', '12', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72']

    def rok_u = Math.random()*100
    rok_u = rok_u.toInteger()

    while (rok_u <= 9) {
    rok_u = rok_u*10
    }

    rok_u_s = rok_u.toString()
    rok_u = rok_u_s.toList().collect { it as Integer }

    p_stulecie = Collections.shuffle(stulecia)
    p_stulecie = stulecia[0]
    p_stulecie_s = p_stulecie.toString()
    p_stulecie = p_stulecie_s.toList().collect { it as Integer }


    p_dzien = Collections.shuffle(dni)
    p_dzien = dni[0]
    p_dzien_s = p_dzien.toString()
    p_dzien = p_dzien_s.toList().collect { it as Integer }


    def plec = Math.random()*10000
    plec = plec.toInteger()

    while (plec <= 999) {
    plec = plec*10
    }

    plec_s = plec.toString()
    plec = plec_s.toList().collect { it as Integer }

    cyfra_kontrolna = (rok_u[0]*1 + rok_u[1]*3 + p_stulecie[0]*7 + p_stulecie[1]*9 + p_dzien[0]*1 + p_dzien[1]*3 +plec[0]*7 +plec[1]*9 + plec[2]*1 + plec[3]*3) % 10

    if (cyfra_kontrolna == 0) {
    pesel = rok_u_s + p_stulecie_s + p_dzien_s + plec_s + 0
    } else {
    nowa_cyfra_kontrolna = 10 - cyfra_kontrolna
    pesel = rok_u_s + p_stulecie_s + p_dzien_s + plec_s + nowa_cyfra_kontrolna
    }