ASP.NET - Application Performance Report


Tools:
- Web Application Stress Tool (http://webtool.rte.microsoft.com)

Servers:
- IIS Web Server (IISWEBSVR): W2K Server SP2, 1Ghz Processor, 640MB RAM, .NET Framework Beta 2
- DB Server (DBSVR02): NT4 Server SP6a, 800Mhz Processor, 1GB RAM, SQL Server 7
- Business Object Server (MTSSVR01): W2K Server SP2, 1Ghz Processor, 640MB RAM, .NET Framework Beta 2

Application:
The application is a simple ASPX page that binds a DataGrid control to a dataset, displaying 100 rows per page. Depending on the test case, the application uses either embedded SQL or stored procedures to retrieve the data.

Methodology:
The test was performed over a LAN for a period of 5 minutes for each set of concurrent users (1, 5, 10, 25, 50, 100). Threads were configured to continously request resources, with no delay between requests. This methodology was tested on several performance features of ASP.NET, including Output Caching, Data Caching, State Management, and Web Services. The goal of these tests is to determine which features of ASP.NET offer the best performance given a certain set of circumstances.

Future test cases will involve Remoting and Out-of-Process State Management.

Contact Rory Groves <rory@grovesinternet> with any comments or questions.

 


Server:  IISWEBSVR
File: /erweb/erviewer.aspx
Desc: returns 100 rows from DBSVR02
Config: No performance optimizations (Baseline on future results)
Users Duration Hits RPS TTFB TTLB Load
1 5:00 3381 11.27 65.84 86.32 20.48
5 5:00 7345 24.48 166.57 199.46 32.89
10 5:00 7590 25.3 358.86 390.72 31.86
25 5:00 7232 24.11 997.99 1030.87 32.88
50 5:00 7444 24.81 1971.22 2004.21 32.99
100 5:00 7572 25.24 3901.82 3932.51 30.69
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB
Comments:
This first test was performed on a basic ASP.NET page with no caching, state management, or other optimization  features enabled. It will serve as the "Baseline" against which future tests will be measured.

Server:  IISWEBSVR
File: /erweb/erviewer.aspx
Desc: returns 100 rows from DBSVR02
Config: Release Build
Users Duration Hits RPS TTFB TTLB Load
1 5:00 3028 10.09 71.49 96.35 24.86
5 5:00 7206 24.02 166.49 203.14 36.65
10 5:00 7463 24.88 355.74 396.2 40.46
25 5:00 7193 23.98 1004.82 1036.69 31.87
50 5:00 7029 23.42 2087.62 2122.96 35.34
100 5:00 7441 24.8 3970.57 4003.55 32.98
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_outputcache.aspx
Desc: returns 100 rows from DBSVR02
Config: Output caching enabled; 360 seconds; * params
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2883 9.61 81.87 101.86 19.99
5 5:00 6983 23.27 182.02 210.93 28.91
10 5:00 7364 24.55 370.53 402.87 32.34
25 5:00 7412 24.71 962.76 1004.2 41.44
50 5:00 7115 23.72 2048.95 2094.42 45.47
100 5:00 7092 23.64 4157.18 4195.12 37.94
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_nosession.aspx
Desc: returns 100 rows from DBSVR02
Config: EnableSessionState = false
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2556 8.52 88.57 114.41 25.84
5 5:00 7019 23.4 174.52 208.88 34.36
10 5:00 7545 25.14 354.42 392.4 37.98
25 5:00 7489 24.96 955 994.63 39.63
50 5:00 7477 24.92 1955.69 1994.37 38.68
100 5:00 7399 24.66 3979.33 4019.63 40.3
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_appcache.aspx
Desc: returns 100 rows from DBSVR02
Config: Stores data in Application state
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2781 9.27 85.62 105.6 19.98
5 5:00 6993 23.31 180.83 210.48 29.65
10 5:00 7436 24.79 368.74 399.18 30.44
25 5:00 7377 24.59 980 1010.82 30.82
50 5:00 7370 24.57 1982.23 2022.77 40.54
100 5:00 7422 24.74 3981.58 4011.01 29.43
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_sescache.aspx
Desc: returns 100 rows from DBSVR02
Config: Stores data in Session state
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2720 9.07 86.89 107.88 20.99
5 5:00 7090 23.63 180.98 208.01 27.03
10 5:00 7447 24.82 367.73 398.45 30.72
25 5:00 7425 24.75 973.22 1004.28 31.06
50 5:00 7433 24.78 1979.24 2007.76 28.52
100 5:00 7255 24.18 4074.27 4107.23 32.96
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer_datacache.aspx
Desc: returns 100 rows from DBSVR02
Config: Stores data in Cache object
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2874 9.58 83.18 102.22 19.04
5 5:00 7143 23.81 181.26 206.66 25.4
10 5:00 7427 24.76 371.68 400.02 28.34
25 5:00 7154 23.85 1010.3 1042.68 32.38
50 5:00 7078 23.59 2051.87 2104.04 52.17
100 5:00 6885 22.95 4259.22 4298.09 38.87
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR
File: /erweb/erviewer.aspx
Desc: returns 100 rows from DBSVR02
Config: Uses local assembly for data access
Users Duration Hits RPS TTFB TTLB Load
1 5:00 2727 9.09 87.59 107.51 19.92
5 5:00 7002 23.34 184.31 210.77 26.46
10 5:00 7341 24.47 374.24 404.11 29.87
25 5:00 7276 24.25 994.83 1024.84 30.01
50 5:00 7012 23.37 2096.73 2127.6 30.87
100 5:00 7157 23.86 4131.43 4160.42 28.99
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB

Server:  IISWEBSVR  /  MTSSVR01
File: /erweb/erviewer.aspx
Desc: returns 100 rows from DBSVR02
Config: Uses Web Service for data access
Users Duration Hits RPS TTFB TTLB Load
1 5:00 532 1.77 542.84 561.29 18.45
5 5:00 956 3.19 1539.29 1561.92 22.63
10 5:00 938 3.13 3156.83 3179.52 22.69
25 5:00 886 2.95 8330.41 8354.36 23.95
50 5:00 685 2.28 20610.66 20636.01 25.35
100 5:00 5 0.02 99676.68 99680.02 3.34
Users Number of concurrent users. Multiple users are simulated by
multiple threads running on the same machine.
Duration Time in minutes the test lasts. There is no delay between request; resources are immediately requested as soon as the previous request completes
Hits Total number of page requests that were made.
RPS Requests per second. RPS = Hits / 300sec (5 minutes)
TTFB Time to first byte
TTLB Time to last byte
Load Page load response time. Load = TTLB - TTFB
Comments:
Web Services, serializing datasets with SOAP and transmitting over HTTP, demonstrate the poorest performance and scaleability. 100 concurrent users results in Page Load response times of only 3.34ms because 96 out of 101 requests resulted in Server 500 Errors.

Contact: Rory Groves <rory@grovesinternet.com>
Copyright © 2002 Groves Internet Consulting, Inc. All rights reserved. http://www.grovesinternet.com