- Unleash Your Web Server's True Power!
- Web Tuning Strategies
- Strategy: Optimize NT's Network Subsystem for Web-Based Workloads
- Strategy: Tune the Web Server Software Engine to Utilize All Available Server Resources
- Strategy: Tune Your Web Application to Utilize Available CPU Resources
- Strategy: Design the Disk Subsystem Layout for the Low Latency
Each Web server engine, such as Apache, Microsoft Internet Information Server 4 (Iis), Netscape, and others, has its own application tunable areas. Here we have selected to optimize the Microsoft Iis Web server engine. Even though we use IIs as our example, you can use the same strategies for other Web server engines. You'll just have to talk to your vendor or check out documentation to implement these tactics. Our primary goal in tuning IIs is to ensure that it takes advantage of all available resources.
Tactic 4: Tune NT and Your Web Application to Stay Where You Want It: in RAM
Regardless of whether you're providing an Internet-based (WAN) or intranet-based solution (LAN), networks introduce enough latency to slow down Web requests to your users, so avoid adding anymore wherever possible in your Web server solution. Accessing memory is tremendously faster than going to the disk drive to get what your Web server might need. It's the difference between running 50 yards (memory access) to your refrigerator for a cold beverage and running a 25-mile marathon (disk drive access) for the same item. Which would you prefer? With this in mind, there are several tuning activities that we can complete to improve the chances that what we want is found in RAM.
Iis is a multithreaded application that runs as a single process instance, referred to as Inetinfo.exe under NT Server. Included in this process, Iis provides an object cache, which is a cache of objects that Active Server Pages (ASP), Web services (http), FTP, and SMTP services frequently utilize. The object cache is part of IIs's working setthat is, the area in physical RAM that Inetinfo.exe occupies. So, our goal is to keep Inetinfo's working setand, consequently, as much of its frequently utilized objectsin RAM as possible. Unfortunately, there are a few other activities occurring on your Web server that want memory space, too. Every Web connection provided by your Web server takes up some RAM, NT's file system cache takes up some RAM (a lot more if your Web server is providing file services), and NT itself requires RAM (approximately 24MB). And, of course, any other applications that you may have running on your Web server, such as Perl scripts or a database engine, are also in the race for memory.
Tactic 5: Tuning NT's Management Strategies for Web Server Workloads
So what can one do? First, tune NT's memory strategy to favor the application working sets. This is completed by selecting Start, Program Files, Control Panel, Network, Services, Server; then select Maximize Throughput for Network Applications. The next step is to monitor how much memory you have available and ensure that your Web server does not page on a regular basis. To do this, monitor the following information using Perfmon:
Process Object: Select the Inetinfo.exe process, and watch the working set counter. This will show you how much memory IIs is trying to use. If you see this lowering over time, you must retune your Web server (outlined later), or add additional memory to ensure that no parts of inteinfo.exe are ever paged out to disk. If this happens, your Web server will run really slowly. If you are running other applications on your Web server, you will want to monitor their working sets, too.
Memory Object: Available Bytes displays how much memory is available. When using the NT memory tuning strategy outlined previously, this value should always be above 4MB. If it is lower, and if the Memory object's Pages/sec counter begins to increase, your server is running low on memory, which will hurt Web server performance.
Strategy: Tuning Iis Memory Usage
Now that you know how much memory is available on your Web server, we can tune Iis to take advantage of what is available. After each tuning change, watch your memory usage closely. If there is still memory available, you have room to tune. But remember to take into consideration your estimated peak Web workloads because each Web connection adds approximately 10KB of memory usage to the Inetinfo.exe's working set.
We can tune the size of Inetinfo's object larger, and then tune its cache characteristics in an effort to optimize its cache usage for your specific environment. The default value of the Iis Object Cache is 10 percent of memory, but you can set it to any value that you want. If you had a large number of static Web pages (which many people are beginning to use again because serving them induces less overhead on your server)perhaps 32MB worthand you wanted to set the Iis Object Cache to be larger, then with a larger cache, you create more room in cache to support other services, too. To adjust the cache size, add this registry entry: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\InetInfo\Parameters\MemoryCacheSize=0x 1E84800. Note that this value was added as a REG_DWORD using hexadecimal notation.
To determine if the Iis cache is large enough to be effective, check the Perfmon counter Internet Information Services Global: Cache Hits %. How effective the cache is depends on the workload being placed on the server. Typically, if the cache hit rate percentage is less then 90 percent, then the Iis Object Cache size should be increased. Remember, before increasing the Iis Object Cache size, ensure that there is sufficient available memory. You may encounter a greater challenge when trying to improve the cache hit rates for Web environments that generate high amounts of dynamic Web page content, unless they are generating the same dynamic content over and over and .
Any cache is more effective if when the request is placed, the relevant data is already in the cache. Based on your Web server customers' habits, you can tune the Iis Object Cache to keep related Web page information in its cache for longer periods of time. To accomplish this, edit the registry entry HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\InetInfo\Parameters\ObjectCacheTTL=0x8CA0.
This example keeps the IIs open descriptors active for at least 10 hours, an average person's work day. The default is 30 seconds. You can monitor the effectiveness of this tactic by looking at the Perfmon counter Internet Information Services Global: Cache Flushes. If the rate of cache flushes is a high value and is associated with a high value of cache misses and page faults, the cache may be flushing too quickly. When the cache is flushed too quickly, repeated requests for the same data do not result in a cache hit when it should. If this occurs, increase the ObjectCacheTTL and MemoryCacheSize even more. Increasing the ObjectCacheTTL keeps data in the cache for a longer period of time, which increases the chances that the data required is found in the cache. The converse of this can also happen, in which case you will want to increase the rate at which the Iis Object Cache is flushed by lowering the ObjectCacheTTL value.