Windows Server has evolved over the years, and tweaks to keep the operating system running well that were valid...
years ago might not hold up.
What follows are 10 basic pointers that can help boost Windows Server performance. While one change alone might not make much of a difference, collectively, these adjustments can give your workload the pep it needs.
Add SSD storage
Even if it isn't practical to run a server entirely on flash storage, it's a good idea to use solid-state drive (SSD) storage for the server's boot volume and for any application binaries. This will go a long way toward improving the server's overall responsiveness.
While SAS or SATA SSD drives are improvements over spinning hard drives, an enterprise-grade SSD drive that uses the NVMe protocol will bring even more benefits that will maximize Windows Server performance, including lower system overhead to reduce latency.
Use the Resilient File System
Microsoft developed the Resilient File System (ReFS) as the potential successor to the New Technology File System with improvements in data integrity and support for larger volumes and file sizes.
Under the right conditions, ReFS can also give your server a performance boost. For example, the file system's block cloning feature can speed up checkpoint-related functions for Hyper-V virtual machines. Likewise, the sparse valid data length feature accelerates the creation of fixed-length virtual hard disks from several minutes to several seconds.
Update the server's firmware
Physical servers should always have the latest firmware, as updates can sometimes improve the server's performance and stability.
There is an issue that affects some Windows Server deployments that use a balanced power plan and may suffer from poor performance. Oftentimes, this issue stems from a server on outdated firmware.
Look for memory leaks
Poorly written applications can cause what are known as memory leaks. An application looks for memory from the operating system and, when it is no longer needed, releases that memory back to the system. A memory leak occurs when the application does not relinquish the memory, even when it is no longer needed, and will request more memory despite having enough in reserve. This will gradually reduce the amount of available memory to other applications and, eventually, cause overall performance to suffer.
The Performance Monitor -- sometimes referred to by its executable name, perfmon -- is one tool that helps uncover these memory leaks. Microsoft recently updated the tool after 25 years and included it in the Windows Admin Center. You can collect data for a memory test by setting up a performance counter in the Performance Monitor to track memory usage to determine where the issue lies. If the application is found to be the source of the memory leak, then it's time to bring your findings to the vendor for a fix.
Jettison the page file
Microsoft designed the Windows page file -- also called the paging file -- to make up for a shortage in physical memory on the server. While Windows can still use a page file for this purpose, the page file is more commonly used for a system crash dump file. In many instances, the page file is no longer needed.
From a performance standpoint, it is better to make sure that a server has the memory it needs, rather than relying on a page file to make up for inadequate RAM.
If you do decide to use a page file, it should reside on a fast disk. Check the following documentation from Microsoft to size the page file appropriately.
Run only what you need
As a general rule, you should only run one application per server or VM. This practice makes it easier to troubleshoot problems but also helps system performance because multiple applications will compete for hardware resources.
It's relatively common for a Windows Server workload to require some supplementary applications, such as antivirus software, backup agents or management agents. You should only run essential tools to maximize the amount of processing power and memory for business workloads.
Disable unused services
Use the service control manager built into Windows Server and disable any services that run in the background and are not required for the server role. This practice helps to boost both Windows Server performance and system security. The more code that's actively running on a system, the larger the attack surface available to an attacker. Most Windows services on the server run with elevated privileges, so any vulnerability in a service has the potential to be exploited.
Get rid of the GUI
While some applications such as Exchange Server 2016 require a Windows Server GUI to function, many do not. Microsoft calls the GUI version Windows Server with Desktop Experience on Windows Server 2016 and up. On Windows Server 2012 and 2012 R2 systems, Microsoft calls this feature Windows Server with a GUI. Windows Server without the GUI is called Server Core.
If you find that a server's workload can get by without a GUI, then you can streamline the operating system's resource consumption by uninstalling the GUI. This doesn't mean that you have to resort to managing the server through PowerShell; although, that is an option. You can simply run the GUI-based management tools from a remote machine.
To remove the GUI, open an elevated PowerShell session and run the commands below, which only works on Windows Server 2012 and 2012 R2 systems. On these newer Windows Server versions, you need to start with a Server Core deployment because Microsoft removed the ability to add and remove the GUI starting with Windows Server 2016.
Uninstall-WindowsFeature Server-Gui-Mgmt-Infra –Restart
If you later decide that you need to reinstall the GUI, you can do so by entering this command:
Install-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra –Restart
Update the hardware device drivers
One of the most important things you can do to keep Windows Server performance at an optimal level is to keep the device drivers up to date, assuming that the OS is running on physical hardware. Server vendors typically release updated device drivers on a regular basis, which often improve performance.
Microsoft sometimes also supplies drivers, but it's usually best to use the ones from the hardware vendor. Microsoft's device drivers may not be tuned to the hardware and may not deliver the same level of performance as the hardware manufacturer's drivers.
Double-check processor scheduling
The Windows operating system allows for two processor scheduling models to optimize the CPU either for running programs or running background services. The correct processor scheduling model varies based on the server's workload, but a general rule is to optimize the server for background processes if the server is not equipped with a GUI.
You can determine the current processor scheduling model by opening an elevated PowerShell session and running this command:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl -Name Win32PrioritySeparation
If the command returns a value of 2, then the system is optimized for programs. If PowerShell returns a value of 18, then the CPU is optimized for background services.
The command returned a value of 2, indicating that the server is optimized for programs.
To change the optimization model, use the following PowerShell command:
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl -Name Win32PrioritySeparation -Value <numerical value>
In the command above, replace <numerical value> with either 2 or 18.