This sections describes how to configure the SAP Web Dispatcher for use with a large number of users.
Crucial for the SAP Web Dispatcher is the number of active HTTP connections, which depends only indirectly on the number of users.
To evaluate how many users the SAP Web Dispatcher can serve, you must take the following factors into account:
When a user sends a request, this request can open more than one HTTP connection. Depending on the application a request can open between one and 10 or 20 HTTP connections. The user cannot see how many connections the request opens. The average number of HTTP connections per request is indicated in the following formula req_per_dialog_step.
The “Think Time” is also crucial to the capacity of the Web Dispatcher. The think time is the time (in seconds) between two user dialog steps (“clicks”). During this time there is no active HTTP connection (depending on the timeout –see below). The think time is indicated in the formula thinktime_per_diastep_sec.
Another important parameter is the keepalive timeout (icm/server_port_<xx> or icm/keep_alive_timeout), which specifies how long the Web Dispatcher keeps the connection open for further inquiries from the request. This timeout is specified in seconds in the formula, conn_keepalive_sec.
There is therefore no one fixed formula, since the number of actual parallel HTTP connections, concurrent_conn, depends on all these parameters. This formula can be used as a rule of thumb:
Use the following settings for the maximum configuration of the SAP Web Dispatcher.
As a rule of thumb you can set the parameters in the profile of the Web Dispatcher as follows.
icm/max_conn = 16350 icm/max_sockets = 32768 wdisp/HTTP/max_pooled_con = 16350 or wdisp/HTTPS/max_pooled_con = 16350 icm/req_queue_len = 8000 icm/min_threads = 100 icm/max_threads = 300 mpi/total_size_MB = 700 mpi/buffer_size = 32768 |
Socket use: Note that each active HTTP connection from the browser to the Web Dispatcher needs two sockets. A pool of open connections to the application servers is also kept in the Web Dispatcher. For this reason icm/max_sockets must be at least as large as the sum of icm/max_conn and wdisp/HTTP/max_pooled_con (or wdisp/HTTPS/max_pooled_con).
This does not tell us anything about the possible number of simultaneous active users, since, depending on the application, a user can open several HTTP connections at the same time.
Caution
The value you set in parameter icm/max_conn must be at least the size as the required number of parallel connections (concurrent_conn in the formula; 13333 in the example below).
MPI size: To find out the total MPI size mpi/total_size_MB use the formula:
You may also have to change operating system parameters for certain high load scenarios.
Operating systems often have restrictions for the maximum number of open “file handles” (sockets) for each process. Make sure that each process can have at least as many sockets (file handles) as specified in parameter icm/max_sockets. The default value is 2048, but a much higher value is recommended for heavy workload scenarios (see above).
The Web Dispatcher checks when it is started up that it can get a sufficient number of sockets from the operating system. If it cannot, you will find the following entry in the trace file dev_icm:
[Thr 1] *** WARNING => maximum number of sockets supported on this host (1019) less than parameter icm/max_sockets (8192) [icxxrout_mt. 227 ] |
Then you should check the settings in the operating system. For more information about the different operating systems, see SAP note 538405.
You have 20000 users, who use the SAP Web Dispatcher to send their requests. On average, each request opens four HTTP connections, the keep-alive timeout is 5 seconds (when the Web Dispatcher notices resources are getting low, it automatically reduces the timeout for new connections). The average time between two dialog steps is 30 seconds.
In this example the number of parallel HTTP connections is:
The size of the MPIs can then be calculated as follows (if the default setting of 65536 for mpi/buffer_size is halved):
Caution
Do not set it less than 32 K, since the HTTP header must always have enough space in it.
This also works with the maximum settings shown above.