System slowness and Windows VM Dynamic allocation of resources


Template level External Article ID

KBA00039892

Issue

The agency is reporting general system slowness and is running Flex on Windows in virtualization with dynamic allocation of resources enabled.

Resolution

To determine this open cmd.exe and run the following command:
systeminfo
You should see output like this and look for this line in particular:
C:\46b545abf22031839b8da7616ef2180d

  • If it says Virtual Machine you know they are on a Windows VM
  • Dynamically Allocated Resources (CPU/Memory) 
    • Next we need to verify are they using dynamically allocated resources.
    • The quick way is to check task manager > performance tab
    • Check CPU/Memory and look at this area:
      C:\935fdca638019755836b755786f69d9e
    • The above image is of CPU resources that are not dynamically allocated. This is good to see 
      • One note on CPU resources. We have noted some sites that have 10 sockets and 10 virtual processors, or 16 and 16. Either way this can be disruptive to performance. It's best to consider less sockets more processors. A good rule of thumb might be 1 socket for every 8 virtual processors.
      • For example 2 sockets, 16 Virtual Processors.
    • Looking at memory though:
      C:\ffac045a528580efe5fc3caedc3dab44
    • You can see that slots used is N/A and there's not a lot of specific details on the Memory. This indicates that the agency is likely using dynamic memory allocation
    • To further verify this you can open Advanced system settings --> Advanced Tab --> Settings in the Performance area
      C:\fba652c61ef10fb4529f8cf91ee97ae2
    • Click Change
      C:\f5ac361e1ad3711301ad66c2b0fdda19
    • You can see that it's Automatically set. Don't change anything, just cancel out.

RESOLUTION 

  • To resolve this, we need to note why this is a problem first
  • The reason this doesn't play nice is because dynamically allocated resources basically will use what is needed from a pool of resources automatically
  • Though this sounds nice and on a normal machine this might be better, on a server running a database this isn't the best setup. It basically sets things up to say "I need 8GB of memory for my processes" and the VM says "Okay, here's 8.2GB of memory". Which basically means the server is constantly around 70%+ utilization for that resource. With a hot database that changes at moments notices this is constantly running hot on resources and leads to lag and slowness while relying on changes from the VM.

Here are the recommendations we have provided should you see this behavior at an agency:

  1. They need to run OS updates and VM updates (if they have any)
  2. They need to go into their virtual machine tools (whether hypervisor or vmware) and change settings so it's not dynamically allocating CPU/Memory
    For example: They need to make sure that if they have 48GB of RAM for the server it's statically setup as 48GB of ram, not dynamically use whatever you need of 48GB