Do you have errors when executing a load test with a lot of users ? Here is what you need to change in your configuration for running an heavy load test.
Number of hits generated by test = number of Vus / average think time by page * average number of request by page
- HTTP 1.0 300 to 400 hits/s for every one GHz
- HTTP 1.1 1000 to 1200 hits/s for every one GHz
- HTTPS 1.0 200 to 300 hits/s for every one GHz
- HTTPS 1.1 800 to 900 hits/s for every one GHz
CPU needed for injector depends also with the work done by a virtual user in the script. Use manage sub-requests, checks on request and use parsers on request increase CPU time. CPU time depends also with think time duration.
Injector process can allocate memory up to 2GB.
A virtual user needs at least 150 KB. The size needed for the virtual user depends on what there is in the script. Save big data in a variable, use manage sub-requests, add checks on request, use parsers on request, increase memory use by a virtual user at a time.
Recommended memory = System memory + number of Vus * 150 ko
Solve memory problems
1) Increase memory allocation
Sometimes, this error can appear : “Unable to allocate memory. Increase the ‘MaxSocketDataBuffersCount’ parameter in the TestExecuter_web.ini file.”
The TestExecuter_web.ini file located in the "<AgileLoad Installation Directory>\bin" directory
The number of memory buffers reserved to store received data. Each buffer is the size of the operating system's memory page (4Kb on x86). An exceedingly high value for this parameter will cause an unnecessarily large amount of memory to be reserved. This is not really a problem since the memory is not committed until it is actually required. A value that is too low will cause the test to fail because there are an insufficient number of buffers.
2) Run more injector processes
When VUs need a lot of memory and 2GB is not enough. You can already run your job on the same injector machine. Duplicate the taskgroup and divide by two the number of VUs.
By default, all taskgroups defined on the same injector machine will run in the same injector process. Modify the injector daemon configuration to parameter that each taskgroup will run with its own process.
Agileload daemon popup menu, select “Configure…”
By default, « Shared HTTP/S Injectors » is checked.
Uncheck it, each taskgroup will run with its own injector process.
3) Use more injector machine
If you already have memory problems, last solution is to use another injector machine.
By default, Windows authorize only 5000 sockets simultaneous. This number is often insufficient to simulate a significant number of users.
If 5000 sockets are rapidly opened and closed in less than four minutes, the default maximum setting for client anonymous ports is reached, and new socket connection attempts fail until the existing set of TIME_WAIT sockets times out.
- An IE user can open up to 2 connections to download a web page.
- After the download, the 2 connections are disconnected because the user think time is often higher than the connection timeout set server-side (between 15 and 30 seconds)
- For a disconnected connection, socket rests in Timed Wait state for 30 to 240 seconds (240 seconds is default)
- With 10 pages/s as flow, there would be no more sockets available.
Error 10048 occurs when all available ports are used on an injector machine.
To resolve this problem, use the RegistryEditor tool to add (or modify) the TcpTimedWaitDelay and MaxUserPort parameters in the registry.
(HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters) and reboot the computer:
TcpTimedWaitDelay: REG_DWORD: 30 (0x1E)
This parameter determines the length of time that a connection will stay in the TIME_WAIT state when being closed. While a connection is in the TIME_WAIT state, the socket pair cannot be re-used.
MaxUserPort: REG_DWORD: 65534 (0xFFFE)
65534 decimal (0xfffe)
This parameter determines the maximum number of open ports
Another solution to clean connections that are in TIME_WAIT state is to modify the TestExecuter_web.ini file in <AgileLoad installation directory>\bin folder :
- Set the Linger option to 0: sockets will be immediately closed without staying in a TIME_WAIT state for the time specified by the "TcpTimedWaitDelay" value.
Below is a sample INI file:
Monitor Injector Machine
You can use Windows collector in injector machine in order to verify if machine has enough resources for injector process while running a test.