Whether you’re experiencing slow logons, random pauses, or you’d just like to accommodate more users on your server, this paper is your real-world field guide to techniques that will identify, troubleshoot, and resolve performance issues of Terminal Servers in your environment. It assumes that you've made the decision to use Terminal Services and that you would like to increase the performance of live servers that are currently up and running.
This paper is written for Windows 2000 and Windows Server 2003 Terminal Servers. These techniques apply whether you're running Citrix MetaFrame, Tarantella / New Moon Canaveral iQ, or just plain old Terminal Services.
The intent of this paper is not to discuss server sizing, nor does it cover the details of whether you should build many small servers or a few large ones. It is not a list of registry hacks that you can implement to increase the performance of your servers, and it cannot fix bad designs.
There is no magic bullet for all Terminal Server performance issues. You're not going to find a web page with a mystical registry hack or Performance counter to track. However, by rolling up your sleeves and getting under the hood of your servers, you can unleash the true potential of your existing Terminal Server systems. This paper will be your guide.
What is Performance?
Although an odd question to ask right off the bat, this is an important one to help frame the context of what you can reasonably expect to achieve by reading this paper. Simply stated,performance (in this case) is getting expected results based on a fixed set of inputs.
Terminal Servers perform well when they meet your expectations. Whether you have 10, 100, or 1,000 users per server is not as important as knowing that you’ll reliably have 10, 100, or 1,000 users per server.
All Terminal Server performance problems really fall within one of two categories:
- You want something to happen faster.
- You want more of something.
There are an infinite amount of things that people want to happen faster in Terminal Server environments. They want faster logons, faster application response times, and faster screen updates.
Think about the speed of different activities on your Terminal Servers. Do you have dialog boxes that you want to pop up in one-tenth of a second instead of one-half of a second? Do you want to cut the logon time from thirty seconds down to ten seconds?
Instead of wanting things to happen faster, perhaps you want more of something. In most cases, people want to accommodate more users per server.
Approaching your Performance Problem
Before you even begin to troubleshoot a performance issue, it’s important to understand that every Terminal Server has a limit. This limit varies from company to company, but it’s based on applications, user profiles, hardware, the network, and countless other factors. There are plenty of “finely tuned” environments in which only 25 users can be accommodated on a server. Then again, there are plenty of environments with 350 users per server.
Once you accept the fact that you’ll never fit 750 users on a dual-processor server, the next step is to define your problem. This is an important step that can be fairly complex. After all, what’s the real problem in your environment? If you have a server that is slow with 100 us-ers, does that mean that your server is not tuned properly? Or does it mean that you have too many users on it? From a performance standpoint, those are just two different ways to look at the same problem.
Given that all Terminal Server performance issues are about the desire for “more” or “faster,” your particular performance issue is likely to be one of the following:
- Logons are too slow.
- The overall environment is too slow.
- You want to get more users on your server.
- The server erratically hangs, spikes, pauses, freezes, and/or gets slow.
You might experience multiple (or all) of these problems in your environment, and quite of-ten they are related. For this reason, it’s recommended that you read through this entire pa-per before customizing your attack plan for your specific performance issues. Let’s begin by troubleshooting slow logons.
Here's the table of contents from the rest of the paper:
Troubleshooting Slow Logons
Understanding the Terminal Server Logon Process
Step 1. Isolate the Problem
Step 2. Check the Roaming Profile
Step 3. Identify Anything that Runs when a User Logs On
Check the Logon Script
Check the Registry
Check the Startup Folders
Dealing with Programs that Run at Logon Time
Step 4. Identify Other Activities that Take Place at Logon Time
Step 5. Trace the Debug Logs from the User Logon Process
Getting more Users on your Server
Choosing your Software Versions
Citrix MetaFrame Version
Real-World Memory Estimation
How Memory Usage works in Terminal Server environments
Determining whether you have Enough Physical Memory
Identifying Memory Leaks
Page File Usage
Changing the way Windows uses the Page File
Making the Page File Faster
Page File Sizing
Tracking Processor Usage
Minimizing the Processor Impact of Applications
Hyperthreading with Intel Xeon Processors
Addressing Disk Usage Bottlenecks
Server Network Usage
Addressing Network Bottlenecks
Kernel Memory Usage
Understanding how the Kernel Uses Memory
Evaluating your Windows 2000 Terminal Server for Kernel Memory Usage Problems
Implementing Kernel Memory Usage Changes on Windows 2000
Evaluating your Windows 2003 Terminal Server for Kernel Memory Usage Problems
Understanding BOOT.INI Kernel Memory Usage Switches
Troubleshooting Erratic Spikes, Pauses and Hangs
Step 1. Search the Web for your Problem
Step 2. Update Service Packs, Hotfixes, and Drivers
Step 3. Launch the Performance Monitor MMC Snap-In
Look for applications that are taking up 100% of the processor
Dealing with Overzealous Applications
Look for Periods when Everything Goes to Zero
Overall Sluggishness and Lack of Responsiveness
Understanding Factors that Affect Network Performance
Resolving Network Bandwidth Issues
Hardware Network Bandwidth Shapers
Squeezing ICA and RDP
Resolving Network Latency Issues
Conclusion and Final Thoughts