WSUS Performance Issues

WSUS is often a service that is just left alone to do it’s own thing but if left alone for long enough it will experience extreme performance degradation.

This may first become obvious when other systems start to timeout. In my case the Windows Update VMM sync was experiencing a time out.


Error (24000)
Error connecting to the WSUS server: wsus-server, Port: 8531. Detailed error: The operation has timed out


When logging on to the WSUS server I found it extremely slow. When loading some screens in the WSUS Admin Console it would often time out and show a “Reset Server Node” error.

WSUS-Reset-Server-Node

The event log contained the following event:


The WSUS administration console was unable to connect to the WSUS Server via the remote API.

Verify that the Update Services service, IIS and SQL are running on the server. If the problem persists, try restarting IIS, SQL, and the Update Services Service.

System.Net.WebException — The operation has timed out


Useful but unfortunately not correct. After restarting all the services and even the server the performance was still shocking.

Since one of the slow screens showed the status of the synchronization, all 9200 of them, my first thought was that this was a database fragmentation issue. Microsoft has a database optimization script for this located at https://gallery.technet.microsoft.com/scriptcenter/6f8cde49-5c52-4abd-9820-f1d270ddea61.

Unfortunately this didn’t really make much difference.

A more comprehensive solution was found at https://community.spiceworks.com/scripts/show/2998-wsus-automated-maintenance-formerly-adamj-clean-wsus. This will likely take several hours to run but returned the server to normal operation again.

The script should be run with a -firstrun parameter to get the server operational again. This will automatically create a scheduled task to run the process daily at 8am which will keep the service optimised.

Server Requirements

This may also be a good time to check that the server is sized sufficiently. It may be possible to run this service with a minimal amount of memory and CPU but over time this may not be sufficient.

According to the WSUS system requirements:

Memory: WSUS requires an additional 2 GB of RAM more than what is required by the server and all other services or software.

At first read this may seem to mean you can have a server with 2GB of RAM but this is actually 2GB dedicated to the WSUS service. If you are running a Windows 2016 server with Desktop Experience this will require a minimum of 4GB of RAM. This may also be a little light depending on the configuration. Does the server also run the Windows Internal Database or is it an external SQL service?

You may want to seriously think about giving the server at least 8GB or RAM or even more to give it some overhead.

Windows Internal Database and Memory

If you’re using the Windows Internal Database then it won’t matter how much memory you throw at the server. The database will use all of it. This is typical SQL behaviour with the service configured with no maximum memory limit. You shouldn’t except this on a large SQL server let alone a small service like this.

To fix this install the SQL command line utilities and run the following commands if you’re using Windows 2012 R2.


sqlcmd -E -S \\.\pipe\Microsoft##WID\tsql\query

exec sp_configure ‘show advanced option’, ‘1’;
reconfigure;
go

exec sp_configure ‘max server memory’, 4096;
reconfigure with override;
go

quit


This will allow the database process to use a maximum of 4GB RAM. You can cut this down even further but be aware of how large the database is. If it’s a 20GB database and the memory is set to 2GB then performance will suffer.

Hopefully this will allow you to use your WSUS server again.

Leave a Reply

Your email address will not be published. Required fields are marked *